Backend saves are different from frontend. They don't go through the same storage processes and bypass a lot of validation and are more like direct stores for administrative purposes.
The saveRegistrationTab and saveEditTab functions are actually legacy code. They're not used anymore and they were originally implemented for frontend only. Their implementation really should be using triggers instead of these functions. Specifically the following.
Backend
Registration = onAfterNewUser
Edit = onAfterUpdateUser
Frontend
Registration = onAfterUserRegistration
Edit = onAfterUserUpdate
Have retested and confirmed saveRegistrationTab does not apply to backend. Backend is usually always considered an "edit" state. saveEditTab does apply to backend, but it does so before the user is created. This is why the user id is always 0.
While this is legacy code that shouldn't be used anymore will go ahead and fix this behavior, but their integration should really really be using triggers. We've documentation for triggers below. In CB 3.x all this legacy API will gradually be removed.
www.joomlapolis.com/documentation/279-community-builder/tutorials/18358-using-cb-triggers
Have created a bug ticket below. Will try to have a fix out today or by end of week.
forge.joomlapolis.com/issues/9219
Note for backwards compatibility reasons saveEditTab must still run during backend user registration. Their implementation should just skip its behavior if the user id is 0.