Are there any best practices you recommend?
To my knowledge there are no best practices around CMSs.
Are there any drawbacks/cons to consider if we decide to use the feature?
If your CMS gets fairly large (100+ entries) it can take a few seconds (30-40) to load. Also multi server queries have their drawbacks. Multi server queries work great for updates or for displaying data, however you aren't going to be able to store your results into any type of table/temp table. You'd have to dump the results into a CSV and re-load if you want to do something like that. Also if you try to connect to more than 4-5 servers in a single connection it can take some time to finish. There is also a limit but I don't remember what it is. ~50 is the practical limit I think.
Any negative in creating a group consisting of both 2005 and 2008 servers?
No, I've done this and it works great as long as your queries work for both 2005 and 2008.
And in regards to transactions, is this per instance or a whole group?
As I alluded to above it's going to be per instance. No data travels between them.
Additional info
All that said I love CMSs. They are a wonderful way to keep a shared list of instances that the entire team can reference. Also if you are interested I have a script that will load a CMS from a table. One of the benefits to this is that you can add the same instance multiple times in different groupings. So one group is broken down by version (2005, 2008 etc) and another by SDLC stack (dev, test, prod) or any other format you can think of.