Using shortcode in template file

the_post_thumbnail() echos the thumbnail and returns nothing. You probably want to use get_the_post_thumbnail() which returns it as a string. Your code currently is equivalent to this:

if (has_post_thumbnail()) {
    // Echo the thumbnail
    the_post_thumbnail();
    // Apply the filter but do nothing with the result.
    apply_filters( 'the_content', "[frame_left]"."[/frame_left]");
}

if (has_post_thumbnail()) {
    // Echo the thumbnail
    the_post_thumbnail();
    $thumbnail="[frame_left]" . '[/frame_left]';
    // Echo the <span> with an empty content
    echo do_shortcode("$thumbnail");
}