I'm looking at the SetPassword logic right now, what it does it is uses the UserInfo object's UserSalt property as the salt.
Then it takes that and generates the password from concatenating the Password, the Salt, and also the "mPasswordSalt" which is an internal value i don't know what that resolves to (if it can't find it, it uses the AppSettings key "CMSPasswordSalt").
After it finishes and saves, it should put an Information Event Lot item in, so if you don't see that it must be breaking before hand.
I would check what the UserInfo object's PasswordSalt value is, make sure that's set, otherwise you may need to send in a request that this is a bug, everything looks proper.
I assume you're on version 10?