I'm having the same issue with consumable products in Sandbox environment (https://developer.apple.com/forums/thread/678105).
The first purchase for a given product goes well but any subsequent purchase for this product will end up by the system restoring the first transaction instead of creating a new one. In the end, the purchase fails as our backend refuses to validate the receipt (the transaction identifier being already validated once).
I made sure all transactions in purchased or restored states are properly finished (the removedTransactions callback being called each time), although the call to finishTransaction may be asynchronous (after our backend (in)validates the receipt). However, each time the app starts or goes to foreground again, the first successful finished transaction keeps on appearing in the SKPaymentQueue as if it had not been finished. Finishing this transaction right away does not change anything.
One sentence worries me in the SKPaymentQueue finishTransaction documentation page :
In rare circumstances, this call might fail, and you'll receive updates for that transaction again.
It looks like we are experiencing this situation but we have no way to check if the call to finishTransaction failed nor why did it fail. Moreover, there's apparently no way to work around this issue and allow subsequent purchases (for the same product).
Also I'm pretty sure I was not experiencing this issue last week (using the same app distributed via Testflight).
I don't know if it's an issue with the Sandbox environment or with the Storekit libs and I cannot test the production environment yet. But I'm not confident at all releasing our first support of in-app purchases.
Aurélien.