That was the bug I fixed yesterday that promotions given by Python were not given as free promotions, which means that the combat mod now removes them unless they have unitCombat classes that match the units in question (those don't have any unitCombats).
However, the fix can't work for units that already had them and those still get stripped. It should work for all units created since the fix, but existing games are slightly screwed because of the combat mod promotion obsoleting code that is used to determine what should be removed and allowed to be retrained (see TB's post on the details of how that SHOULD work - current SVN matches that behavior, but only for units that were created after the fix).
@TB - maybe you should add a load-time check that flags all promotions the unit has 'inexplicably' (i.e. - that canKeepPromotion claims it shouldn't) as free. That would save old games...