I m going through this at the moment, so I m going to add my 2 cents (late to the game).
I m in charge of leading our team off of CVS onto either Subversion, Mercurial, or Git. Your team s expertise, your project(s), and your release methodologies will probably change what answer you give. For disclosure, my team works on a series of smaller Java projects and use the Netbeans IDE and Maven to develop and release software.
Subversion
Yeah, sorry, it s a little off-topic, but it s still a definite upgrade from CVS. It ll result in atomic project commits, a wide existing user-base, and some good community tools. It s probably the easiest transition with the least training necessary, but you definitely don t have the power of DVCS. I recommend the cvs2svn tool.
Mercurial
Mercurial has great documentation, even for some of the weirder use-cases. It s easy to spin up a repository. Easy to install (just use Python, setup-tools, and easy_install mercurial ). Easy to convert to, and the developers who hate command line get the great TortoiseHg tool out of the box.
I found the cvs2hg tool far more accurate in converting than the built-in hg convert extension, but ymmv.
For teaching everyone hg, try Joel s site: HgInit. There s plenty of books and online tutorials, but getting everyone used to pushing and pulling (and how it relates to your release process) is going to be the craziest part. I personally find this push / pull model of DVCS preferable, but others may disagree. It s practically like forcing everyone to branch every piece they re working on.
When deciding whether to go with subrepo s or just meshing the entire thing into one big repository, opt for the single repository. Dealing with multiple subrepo s proved to be a bit of a pain over just having one repository with inter-mixed history. (Your list of projects and how they interact will affect this decision greatly) Your IDE and GUI tools will help overcome some of that weirdness. After conversion go through each branch and know what to expect. Swapping to a branch no longer means you ll get a few changed files. It means everything that wasn t branched doesn t exist.
Git
I really ended up being surprised at how much I liked this tool. Our IDE s integration was better, the tool was faster than hg (in my experience), and it was easier to set up stuff like ssh repositories.
Installation and conversion and setup was a bear. In the end I decided this part was worth more than the effort required. According to this question, the git cvsimport tool is broken on larger CVS projects. Also, my go-to conversion tool: cvs2svn sorely needs help improving the Git functionality. After I figured all that blob/dump-file-then-import-to-bare-git-repo business, I found that it forgot to pick up all of my branches from CVS. Maybe I just never understood the tools well enough, but the safest way off of CVS to Git seems to be through SVN.
Also, there s plenty of good arguments against DVCS, such as the issue of every developer walking around with the entire repository. If you ever push some bad jojo up and it gets pulled, it s gonna be a huge pain removing it.
For hosting an http repostiory, take a look at scm-manager and RhodeCode. RhodeCode s harder to setup, but has far more functionality. Both tools are difficult to use with subrepos, so be prepared for that.
As for convincing your boss. I did it through coining the term CVS-surgery . Just like anything else, keep track of all the time you re wasting going back through CVS and fixing commit / rollback errors. Then present your case as "You d have X hours of my time for free right now if we d just convert to this tool". I found rolling back to an untagged commit in CVS, file-level commits, and the difficulty involved in finding what branches changes were taking place in the biggest issues with CVS.