After looking at User.pm I found the subroutine in question is set_password, and there were 2 of them, the first (which would get called presumably, I'm not really a perl programmer) looks like an old stub:
sub set_password {
my ($u, $password) = @_;
return LJ::set_password($u->id, $password);
}
The second has some code that actually updates the user and password table.
So I fixed this by commenting out the first apparent stub method. New users get a password entry and can log in properly now.
Its weird no one else posting seemed to have this problem, but I checked and this is the latest svn version of User.pm, so maybe that needs to be fixed. I still have the email activation link being out of date, but I believe some answers to that were posted here earlier so I'll check that in a bit.