Non-consumable In-App Purchases return no products during App Review only (works in TestFlight and sandbox)

My app has been rejected twice under Guideline 2.1(b) because its In-App Purchases did not load during review. Both reviews used an iPad Air 11-inch (M3); the latest was on iPadOS 27.0.1. The reviewer's screenshots show the app's fallback state, which appears when StoreKit 2's Product.products(for:) returns none of the products.

I can't reproduce it

The same build loads all four products with their prices in every test I've run:

  • TestFlight on iPhone and iPad (iPadOS 27.0), with a US account
  • Run from Xcode with StoreKit Testing disabled, using a brand-new US sandbox account and a fresh install
  • Starting offline and then reconnecting
  • Signed out of the sandbox
  • With In-App Purchases restricted in Screen Time
Setup
  • Four non-consumables, $0.49 USD, available in all countries, with localizations and review screenshots
  • Submitted together with the app version (status: Waiting for Review)
  • Paid Apps Agreement, banking and tax all active
  • I've worked through Technote TN3186 (Troubleshooting In-App Purchases availability in the sandbox)
Code

Loading is a single call, retried a few times, and the user can tap Try Again:

let products = try await Product.products(for: productIDs)
Questions
  1. Is there anything that can stop products from being returned in the App Review environment but not in the sandbox?
  2. Is there a way to check what the review environment sees?

Any help is appreciated.