"why would you play soldier in 12v12 if you could just be demo instead"
I don't know. Maybe I would because I like soldier better? That seems like a fair enough reason.
Another reason could be simply because a class is only as good as the person playing it and the people that person is playing with and against. You can throw base stats at me all you want. "Demo is capable of dealing this much damage this quickly because of this weapon's damage parameters!" This doesn't mean shit if the person behind the wheel is worse than those they are against, making these stats irrelevant, or if said person is better than those they are playing against, also making these stats irrelevant.
I can walk into a pub right now on soldier and I guarantee that I will outplay more of the demos on the other team than they will me. Why? Because I'm better than the average demo pub player, even more so the average pub player in general. Does this mean soldier is overpowered? Well, why play demo in 12v12 when you could just play soldier?
I should probably throw in the whole concept of "class gimmicks". You know, the thing that makes this game what it is. Class gimmicks and a player's in/ability to play any of the given classes, most of the time, prevents these classes from truly being over/underpowered, or "in need" of a nerf or buff.
I mean, you have all of these different factors that come into play when figuring out how balanced each class is. Some of these factors are things like: class gimmicks, the weapons used, a player's skill, maps, the endless amount of possible situations, and hell, even possible situations that can be produced within other possible situations. There are so many factors.
The point I'm making here is that if a class was actually overpowered, it would be obvious as shit.