The one endpoint you have not checked is the one that would explain this. /mc/connection reports the Merchant Center link, not a successful product push, so it stays connected even when every upload is rejected. The pushes go out through the WooCommerce Connect proxy, and when they fail there the Action Scheduler job still completes, which is exactly the mismatch you are seeing: actions complete, products stay not_synced, and the issues endpoint has nothing because nothing ever reached the Content API.
The logs will tell you in a minute. The plugin already logs by default (the woocommerce_gla_enable_debug_logging filter is on unless something turned it off), and the entries land in WooCommerce > Status > Logs under the source google-for-woocommerce. The two that matter are the exceptions from the Merchant Center client and any invalid Guzzle response, since those carry the actual API error body rather than a status word.
Two configuration cases produce this exact silence. First, the site is linked to one Merchant Center account while the domain claim sits on another one, typically after a multi-client account was involved, in which case uploads are accepted and dropped. Second, a reconnect that reauthorised the Google account without restoring the Content API scope: the connection reads as fine, uploads 403 behind the proxy. If the log shows nothing at all for the sync run, that is its own answer, the batch never ran under the account you are looking at, so check whether the completed actions belong to a stale group after the reinstall.