1. If
    OnPlayerRestored
    is designed to be the first event where you should use the data, enforce it.
  2. If
    OnPlayerDataUpdated
    fired before
    OnPlayerRestored
    is unreliable, don't fire it.
  3. Having to force every implementation to do checks if player is restored is poor design choice, because it is a trap every new user will fall into, and will be forced to include the extra check just to make it work at all, which is a performance sink.
3.1 If such "best practice" is mandatory, just make it automatic.
  1. Semantically "update" should mean there is a new version of something existing, and "restored" should mean the data is first restored (as it is currently designed and intended). These meanings should be actually implemented rather than labels you are relying the end user to sort out.