I’ve worked with all the 4 mentioned here (CVS, SVN, hg and git).
The easiest transition was, of course, from CVS-> SVN. We did that, cause SVN is better. Can’t remember why 
Transition from SCN -> hg took some time. We had some minor problems with open tips and the need for regular merge. “Rebase” was the magic wand that fixed everything (also, we got a small presentation by ppl of bigger knowledge)
Now I had to use git, cause I wanted to contribute to a github project. I thought I knew the idea and the concept of dvcs but after using git, at some point I felt like giving up everything. I don’t know, if it was the tooling or the help/tutorials or git having it’s root with linux (I mean the mindset and concepts) but for me, getting git to work and understanding everything was quite a hurdle to overcome.
And then I had to do my first merge with git … -_-
For hg (and git), one of the small nice features is how the verion control files are hold. They are in a single folder that sits in the root, opposite to cvs/scn that have the metadata in every single versioned folder.