WP_Query: “post_parent” and “post_type” combination returning strange results

It turns out I have an errant pre_get_posts function:

function fgw_parents_only( $query ) {
    if ( ! is_admin() && $query->is_post_type_archive( 'project' ) ) {
        $query->set( 'post_parent', 0 );
        $query->set( 'posts_per_page', -1);
    }
}
add_action( 'pre_get_posts', 'fgw_parents_only' );

Not exactly sure why is_post_type_archive caused this to show up on a single-project.php template, but I managed to solve this by changing the test to:

if ( ! is_admin() && $query->is_post_type_archive( 'project' ) && ! is_single() ) {