Hide elements outside loop based on query

You can use the function wp_list_pluck to get the ID of the posts retrieved from the query.

Just move the query before the h2 element and get the posts ID’s:

// Set a bool to know if at least one post has post thumbnail.
$has_thumb   = false;
$first_query = new WP_Query('cat=1&author=" . $post->post_author . "&order=DESC&tag=Tattoo&posts_per_page=1000');

// Check if the query have posts.
if ( $first_query->have_posts() ) {
    // Get the posts id's.
    $ids = wp_list_pluck($first_query->posts, 'ID');

    foreach( $ids as $id ) {
        if ( has_post_thumbnail($id) ) {
            $has_thumb = true;
            break; // If at least we have a post thubmnail we don't need to continue.
        }
    }
}

Then you can check if there are thumbnails and show the h2 if so.

<?php if ( $has_thumb ) : ?>
    <h2>Tattoo Work by <span style="text-transform: capitalize;"><?php the_author_meta('user_nicename'); ?></span>:</h2>
<?php endif; ?>