post var problem with shortcode loop

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');