We were trying to expose username, firstname, lastname only to Admins (Field Conditional Show in Profile Edit). Only the fullname (formatname) stays public. The intent was these fields would be set at registration and could not be changed afterwards by the user.
1) When username is required, the user can no longer save their profile without a "username missing" error. The username is still set and remains unchanged.
2) When any part of his profile is changed by the user and saved, his firstname and lastname are nullified. Firstname and Lastname are still required and no error is generated on save or subsequent saves (even with empty names)