I encountered the "Role has already been taken" problem when swapping role classes with new IOM ones. In my case it was caused by a mismatch between the roles on the client and server. I was able to solve it by swapping roles on the server in the mutator class and on the client in the player controller class.The mutator that we use on the TWIL servers does have the ability to exchange classes by other classes. For instance replace the EliteAssault by a Rifleman class. It's full working as long as both classes are from the same faction. Just out of fun I once tried to use it to exchange a HOS class with an RS class. It does show up correctly on the class selection screen, however selecting is will give a "This class has already been taken" even though the counter still indicated 0/1. This was on a HOS map. I never tried to replace a RS class by a HOS class on a RS map. The chance of that working is a bit higher due to the inheritance tree of the HOS vs RS classes. But then still the HOS class would have characteristics of the RS faction due to all other objects being RS class instances.
In short, I think a lot of coding is required to get the factions to work as they do on their original maps.
Perhaps the RO2 roles in RS problem could be solved by creating a new set of roles for each faction (RSUSARifleman, RSGermanRifleman, etc.) instead of two sets of axis and allied roles per team.