Ok so I found the issue. I'm using a build script to inject the current bundle version into the receipt validation code using a preprocessor macro. Xcode 11 introduced this "MARKETING_VERSION" configuration, and this basically borked my script. The receipt validation was comparing the bundle version from the plist against the literal string "$MARKETING_VERSION" so that obviously wasn't working.
The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!