Without looking into the relevant code bits:
It seems that J does clear the relevant static-"cached" object. That's evident from the fact that you can access the correctly-valued object in the onUserAfterSave method in "most" of the cases.
It's just that when the front-end does this process, we're given the opportunity to initialize the static-"cache" when we shouldn't (via a getUser() call).
Arguably, one could say "don't use ::getUser(), look at what the vanilla J user plugin does with $this->_getUser()". I could refactor my code around this, no problem (why, hello there mr. JTableUser, you look handsome tonight). But there's two pretty serious points that would still be pending:
1) getUser() is no longer doing exactly what it says. It does that "on most places". And suddenly, we have to be really careful on what we call within the user plugin group in case that somehow cascades down to a getUser call.
2) There's still a behavior discrepancy between front and back-end that shouldn't be there.
I could go on about #1 and how there seems to be mass confusion regarding all things user-update (I've looked into the CB and JomSocial code, and it's not pretty). But this would be beyond the point of this post.