Hide feature image when is not populated

I guess the <div class="single-post-thumb" > is the one with the border etc.

Change your code to this:

if ( has_post_thumbnail( ) ) {
  echo '<div class="single-post-thumb" >';

  tie_thumb( '', $width, $height );

  if ( get_post( get_post_thumbnail_id( ) )->post_excerpt ) {
    echo '<div class="post_thumbnail-caption">' . get_post( get_post_thumbnail_id( ) )->post_excerpt . '</div>';

This will cause the <div class="single-post-thumb" > to only show up when the post has a post thumbnail.

I don’t know what tie_thumb( ) does but seeing the code I expect it to show the thumbnail.