I think there are some issues in here (I haven't studied it all but I was looking to see what you did with trade routes so I looked at CvCity.cpp):
No longer capping base yield modifier at 0 below. New code (in CvCity::getBaseYieldRateModifier()) is:
Code:
// TB Note: The following was capped at a minimum of 0 but negative traits, etc... should create a negative potential.
return iModifier + 100;
This used to be std:max'd with 0, and it needs to be. The number this returns is NOT the modifier - it is the actual percentage yield of the raw number that you get. So if you allow it to go negative you're effectively allowing a modifier below -100. The result will be that working tiles for 10 commerce vs 9 commerce (say) SUBTRACTS gold and SCIENCE instead of just adding less, which I can't believe is intended. This also applies to the changed assertion in setBaseYieldRate() and also in changeYieldRateModifier() - it may not be needed (probably redundant anyway) but what you have changed it to makes no real sense (if eIndex was negative it would already have crashed from using it BEFORE the assertion since it's a parameter in the previous call)