Hello,
regarding the OnCreateNodePolicy - am I safe to assume you are not using the EVERY_EVENT notification frequency? If you use TRANSACTION_COMMIT, your behaviour will be delayed until the end of the transaction. If you encapsulated your tenant-iteration within a transaction, then you have one huge transaction for all tenants and at the end of the tenant, you won't be in any tenant context exception for the global admin. If you have not done any manual transaction handling, then it is safe to assume the default Alfresco transaction behaviour for your scheduled action is the root of the issue.
In my experience, it is better to create a new transaction for each tenant nested WITHIN the runAsTenant callback, so when any behaviour is triggered, it is always guaranteed to be executed in the tenant context it was triggered in. You can use a retryingTransactionHandler for this and force it to create a new transaction in the doInTransaction call.
Regards
Axel