you really shouldn’t use query_posts()
for anything other then the main query of the page. Instead you should use wp_query() or get_posts() , also since you return a value before running wp_reset_query() then its never actually being reset.
so change your shortcode to this:
function casestudy_shortcode($atts){
extract(shortcode_atts(array(
'type' => 'case_studies',
'limit' => '1',
'case' => '',
'size' => 'small'
),$atts));
//save the real $post
global $post;
$real = $post;
//The Query
$args = array(
'post_type' => $type,
'posts_per_page' => $limit);
if ($case != ''){
$args['p'] = $case;
}
$s_query = NEW WP_Query($args);
//The Loop
if ( $s_query->have_posts() ) : while ( $s_query->have_posts() ) : $s_query->the_post();
//return sb_post_image('100','100');
//the_post_thumbnail('portfolio');
$return .= "<div class="".$size.""><a href=\"".get_permalink()."\">".get_the_title()."</a>" . get_the_excerpt() ."</div>";
endwhile; else:
endif;
$post = $real;
wp_reset_query();
return $return;
}
add_shortcode('casestudy', 'casestudy_shortcode');