I agree with that but i'd add that i'll also commit at any stopping point. Need to leave for work? Commit. Need to go home ? commit. Doesn't matter how broken the code is at that point. I'll rebase the ugly commit away. Usually the ugly commit will have a message like "INTERIM COMMIT - REBASE ME"
I'll also happily push these ugly commits to a topic branch on a remote machine for backup purposes as long as I know that no-one else is working on that branch.