Receiving of XP should be as hard to handle as possible. I hope that there is influence according to which teammates are playing with that player, staff level, competition level, his secret dispositions etc.
However back to the promoting system. While there could be changed staffs indeed even often I can imagine any contract which will count even actual wage as a player.
... so player which is getting normally 10k, could have an subcontract as a trainer, which means +5k in his wage or so. He can be fired from staff position or player position and his salary will change also.