This is only a guess, as I'm going from memory of how it works and not looking at the code, but odds are high it is at least mostly correct (TC01 should know for sure):
The problem is probably that the savegame stores the correct total yield for each "city", so it shows the correct value as long as you don't do anything to make it recalculate it. The yield recalculation that is done when you move population involves two parts and only one part is updated, that being the yield from the population on the planets (which is done in Python, adding to the total yields from the buildings that are retrieved from the DLL). The percentage modifiers from buildings ought to be correctly applied to this, I think. However, any direct yield contribution from buildings is probably using a set of values that are all zero until you actually run a turn to get it to calculate these values, so they contribute nothing in the new calculation before then. Since the list of buildings doesn't change during a turn, the value that is calculated for their yield contributions between your turns gives the correct result on turns after the first even when you move population around between planets.
The fix would be to either store the DLL's partial yield values in the savegame or to recalculate them on startup. Recalculating them is better since it could also also solve the similar problem that happens on the first turn of a new game (when the Capitol's +8 commerce is not counted) if it is done in a place where the calculation runs in either case, and it also doesn't break savegame compatibility.