Am I right in thinking that RestorePurchases just calls ProcessPurchase for each (non-consumable) item that it finds that have already been purchased?
If so, is there any way of differentiating between a ProcessPurchase that has been called directly rather than one that is called as a result of a Restore Purchases?
We don’t have a built-in way to do this. One thing to note is that for auto-restore, ProcessPurchase is called immediately after OnInitialized, so one option to get the behavior you are looking for might be to check if the time between OnInitialized and ProcessPurchase is < 0.1 seconds. If it is, then it is highly likely that it is an auto-restored purchase.