I've used google code and launchpad mostly, and occasionally looked at sourceforge.
Sourceforge does not seem user friendly, has not moved on in ages, and I would avoid for a new project. Update: Sourceforge has recently launched support for git, bzr and mercurial, along with running your preferred project management software - trac, mantis etc.
Google code is pretty nice. The code browsing is good. There is a nice wiki to document your project. It uses subversion as its VCS so is well supported by many tools, good integration with IDEs, and the other advantages of a mature tool. Update: Google has recently decided to add support for mercurial.
Launchpad is cool, the major missing feature being some sort of wiki for users to document their project. It is developing fast (a web API has just been released) and uses my favourite VCS - bzr. And for those it matters to, the code for launchpad itself will be released in 2009, so you can run your own instance if you want.
As to how to choose, I would start with the VCS you want to use, and then choose from the hosting choices available. I won't go into VCS choice on this question ;-) (If you want to then check
out
these
questions.
@dbr: launchpad uses bzr, not mercurial.