By far the biggest hurdle will be educating the developers to the differences in using the source control systems.
Checkout Edit Checkin to Edit Merge Commit:
Developers new to SVN have to be comfortable with the idea of two developers making changes to a file at the same time, and that they will merge those changes later. VSS users are typically unaware that this style of source control is even possible and most certainly don't feel comfortable with the transition.
Project Binding to File System Binding:
VSS typically manages source control at the project and solution level. The project is bound to the source control and any changes which happen to the project also happen to the source control. In SVN, there is no such binding. All changes are tracked at the file system, meaning that when you add a new file to your project, you also have to add the file to the source control.
For this reason alone, I recommend investing the time to set up a continuous integration server for your projects. This will quickly pick up on any files which are missed from commits and prevents the awkward scenario of other developers doing a checkout and getting build errors because a file is referenced in your project, but is not present in your source control.
Branching:
Although you can perform branching in VSS, I've rarely seen anybody use it because it's quite tricky to set up a branch, switch to a branch and then merge the branch when you're finished with it. Branching isn't required to use SVN, but it's probably one of the big reasons you'd make the switch. Developers need to get comfortable with the idea of creating branches where it seems appropriate and re-merging them into the Trunk.
If your developers are already comfortable with using SVN, you shouldn't have any problems. If not, they may need a bit of guidance to make them see the advantages of SVN for themselves, and hopefully end up enjoying using it.