Hmm... I don't think you can just dump the Python on me like that. Firstly I have no idea what the stuff already in the Event Manager is - and I don't have the time to figure it out either. And secondly there are no bulkheads between Python vs XML vs SDK. The game runs on C++ code and all the XML does is it defines some values and settings. The Python is mirroring the C++ code and is really just a interface for running the C++ code. So its basically all C++, really.
A crash like the one you describe is caused by the
game, not the Python or the XML. But something is obviously not computing - it could be a bug in the source code - it could be a invalid setting somewhere - it could even be a corrupted image file. A Python exception shouldn't cause the game to crash either - its works the opposite! When the logic of the Python code breaks - or if there is a error in the code - then the Python simply quits and throws an exception. No crash, even if the game could get broken in the process (because some process was interrupted and data may have been lost).
With that said, lets suppose there is a XML setting somewhere referring to a broken image. (Just a plausible scenario, nothing more.) If that image is prompted to be used by a Python script, sure then the Python code is indeed causing the crash. But there doesn't need to be anything wrong with the script itself!
So basically this is debugging. It can be any combination of things conspiring to make the game crash. Normally I'd suggest reverting all changes and re-introducing them one at the time, until the bug appears. But since you already merged in the code into CvEventManager it would actually make more sense to disable the new features one at the time.
I made it really easy to do this. You disable the entire GGPowers module (and the companion modules) from ever being activated by commenting out the lines that say initiatePowers(). If you do this and the game still crashes, then its not the Python code I supplied causing the crash. Because it isn't being used. (You can comment out the entire intitiatePowers() function definition just to make sure. Its at the end of CvEventManager.py.)
You can similarly disable any of the powers by commenting out all lines referencing those particular features. Like if you wanna disable the Russian power you comment out all lines that say power.russia() - but you need to catch all of them - and there can be several.
So it shouldn't be very difficult to rule out the Powers code as the culprit at all. But I'll give the mod a spin and see if I can't solve this one for you. If I can't, I unfortunately don't have time to debug your entire mod. Its your mod and you're the also the best man for the job.
edit: Unfortunately the download isn't available...