I think I understand what you are trying to achieve now. You will need to modify the `single.php` (or `single-post-type.php` if it is a CPT) to run, via ajax, your gallery or whatever **if** the content is being viewed through ajax. Here is something (modified a bit) I have used in the past to do just that. 

This is the main loop, pretty much just as you indicated above. We assume fancybox is loaded and ready.

	while($loop->have_posts()) : $loop->the_post();
		echo '<a href="'.get_permalink().'" class="fancybox fancybox.ajax">'.
		get_the_post_thumbnail($post->ID, 'some-size', array('class' => 'some-class')).'</a>';
	endwhile;

Add this function to `functions.php`. It will return true if the content is being viewed through an ajax request.

	// content loading in ajax? 
	function is_ajax() {
	    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
	    $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
	}

Then on your single, you'll want to figure out if you're in ajax or not, to create something a bit like this:

	if(is_ajax()){ 
		echo '<div class="gallery-holder">';
	} else {
		get_header(); 
		// put any other divs that need to happen in a normal page here
	}
	
	// do something with your images here, such as an attachment loop

	if(is_ajax()){ 
		echo '</div>'; // close anything we opened
	} else {
		get_footer(); 
		// put any other closing divs here
	}
	wp_reset_query();

Realize that many people "tab browse" and so will open your thumbnail preview in a new tab, so this will allow your page to still be viewed in the alternative method.

It is also up to you how you want to [run through all the images][1] on the `single.php`.


  [1]: http://wordpress.stackexchange.com/questions/61393/get-images-attached-to-post