Query sticky posts with thumbnails

You need to set ignore_sticky_posts to true in your query arguments. This way you exclude sticky posts and only focus on the post ID’s array being passed to post_in

'ignore_sticky_posts' => true,

EDIT

If this does not make much sense, please see my answer here to similar question where I have explained it a bit better. Be sure to check it out

THE CODE

$r = new WP_Query(array(
    'posts_per_page' => 5,
    'post__in'       =>  $sticky,
    'meta_query' => array(
        array(
            'key'     => '_thumbnail_id',
            'compare' => 'EXISTS',
        ),
    ),
    'post_status'    => 'publish',
    'orderby'        => 'post__in',
    'post_type'      => array( 'post' ),
    'ignore_sticky_posts' => true,
));