WordPress hide post from custom post-type on a single page

Instead of using the pre_get_posts hook simply modify your WP_Query to fetch posts with certain conditions.

$loop = new WP_Query( array(
                    'post_type' => 'projects',
                    'orderby'   => 'rand',
                    'posts_per_page' => 1,
                    'meta_query' => array(
                            array(
                                'key'     => 'your_field_name',
                                'value'   => 'the_value'
                            ),
                        ),
                )
            );

This, right from the beginning only fetches the posts that matches the value for the meta key you provide.