In multisite, switch_to_blog() repoints the database tables and the uploads path. It does not reload the other site’s active plugins, its theme, or anything a plugin cached in a static property during this request.
switch_to_blog( $site_id );
$posts = get_posts( array( 'post_type' => 'product' ) );
// plugin functions from THIS site are still the ones loaded
restore_current_blog(); // never just switch_to_blog( 1 )
So a query relying on a custom post type registered by a plugin active only on the other site returns nothing, and constants defined on the first site still hold. Always unwind with restore_current_blog() rather than switching back by id: switches are a stack, and mismatching them leaves later code pointed at the wrong tables.