This is based on a Chromium issue.
The way the spec is written, the playing event that is fired as part of the play() method is queued synchronously, which means that the play command may not even have reached the media framework yet. This means that when the playing event is fired, there's no guarantee that media playback is really progressing.
Ideally, the event should be fired while the currentTime is still the same as when play() was called, but where it will have increased after any setTimeout or requestAnimationFrame callback.