I love the idea for your plugin, but this seems like a weird way to do this. I am sure there is a reason, so I have to ask... why do it this way?
Could you not hook a few events, like round start, round end, and change team.
That way if the round starts, and the players team variable is empty, then its a new map and load up the team variables. If the player changes team and the team event fires before the end of the round, then load up his new team in the variable. If the round end fires and then round start fires again, and the variables are not zero'd out, then you need to check teams and put everyone on the right team. You could also use the team index numbers (0,1,2,3,4) etc. instead of the signatures.
Like I said, I am sure there is a reason you are doing it the way you are, just wondering if the method I mentioned would work (if you tried it), and if not why.
I have a windows server so if this method worked, it would work for all.