Image credit to DALL-E-3
The problem presented itself in Google Merchant centre as alerts alongside products. Feed data for stock or prices has been "fixed" base on data found on your website… or something along those lines. The feed was accurate and the website was accurate but the “fixed” data was incorrect.
So to cut a long and boring story short, the problem was with “Structured Data” for the product type in "application/ld+json". The official BigCommerce theme came with built in "application/ld+json" which is great however it does not separate out variants so if you use select or radio options on your product pages for things like size or colour options you should check your Schema is valid. Normally it might not make much difference to have one top level product tagged as the entity for SEO purposes however Google was using it to determine stock and price.
For BigCommerce the fix was a custom page template. Adding a new template for products with variants and using some logic to check the variant type to swap the @type from “Product” to “ProductGroup” then implement “hasVariant” https://developers.google.com/search/docs/appearance/structured-data/product-variants.
One further issue with BigCommerce was how the landing page for each product variant in the feed displayed the default top level product. As a customer, imagine clicking on the lower cost smallest option in the google shopping area then arriving on the most expensive variant or one without stock available. Further work was applied to the feed url, each variant having a unique url via a query string. Then using javascript on the product page to read the url query string, capture the variant and set the relevant select or radio options which in turn loads the correct price and stock.