Ok, one very specific improvement to the MP system that could be employed would be to ensure that all values are passed from client to host and back.
1) Sync Issues:
There are some very specific issues that result from MP sync problems that occur, things such as tech loss. This issue arises because the player gets the signal that his tech has finished, and takes the tech team off duty, but the host does not know this has happend. The host reads the tech as being at 99%, while the client believes that it is at 100%.
The effect is that rather than being finished the host thinks the player has cancelled the tech. The tech has to be manually edited in. In the case of Doctrines this is hell because the values for every single unit for that country has to be changed, manually. It is actually easier to edit the save so the doctrine is put back in a tech development slot at 99.99%, so that if fires immediately after the game is restarted making all of the unit changes. This is still a substantial edit. But far better than editing every single unit in the OBB. I am not sure of the best way to account for this in programming terms, but there must be a way.
Similar problems also occur with minister changes. The host does not get the signal that a minister has been changed and so a player might be thinking he has 10% more IC than the host thinks and his total IC is wrong, as far as the host is concerned. When the game is rehosted he has to change the minister again, adding insult to injury because he gets more dissent.
2) AI values
Not all AI switch values are uploaded to the client. The AI switching and all of the AI events happen on the host computer, but not on the client computer. This is normally ok, but does cause some odd effects.
For example, the clients "demand chance" will not be the same as that of the "host" in the case where I change the "claim_acceptance = [X]" of a country using an AI switch until the game is saved and reloaded. In this case the host machine might think that the "demand chance" was 50% but the client would see it as 0%.
That is just one example. There are many values that are not properly communicated between host and client, while the game is ongoing.
This is particularly a problem in the case where the host crashes before taking a recent save, and the players are forced to use a client save. Lets be real, it does happen, one in 20 games or so at least once, and this can totally ruin a game that people have sweated over for hours, if not days, because all the specific values for diplomatic functions have been replaced by default values in the client's emergency save.
This can lead to wild results such as Siam declaring war on Japan, or China suddenly deciding to ally Japan and so on.
If those two things could be fixed by having the client and host properly communicate all the values to each other on a regular basis, many hours of editing could be avoided and entire games saved from the dustbin. Getting the client and host to communicate everything between each other would be the single biggest improvement to the MP gaming function of the game that you could possibly make at the level of the game engine.
3) Reciprocal Trading for Profit Exploit:
A player makes a trade for 10 supplies with country A, using 20 of resource X, he then buys back resource 20 X in a second trade for 5 supplies to the same country. He makes a third and fourth trade doing the same thing, increasing his profit margin each time. This goes on basically until country A is bankrupt. I think this could be simply dealt with by automatically consolidating all trades between countries into one trade. That would decrease some trade flexibility but kill the exploit, which is rather nasty all around.