`onBeforeSaveUser` - Access existing user data
Not totally sure, but I believe this may be because the UsersService actually caches UserModels fetched by getUserById() locally in a private class variable.

Instead of using getUserById(), try pulling the user with an ElementCriteriaModel:

$existing = craft()-&gt;elements-&gt;getCriteria(ElementType::User, array(
    'id' =&gt; $userId,
))-&gt;first();