I think I might see what the issue is (conceptually, haven't looked through the code yet to find out if I am right):
Logic was adjusted in many places of the code to use the number of workable plots for the current city (typically 2 rings), instead of the global max (3 rings). Many arrays exist which loop over all workable tiles and fill in their data and decide what is going on. These arrays SHOULD all initialize at global max size, but one might be initializing at city max size.
If that is the case, then there is a major issue with changing your size by building (happens after initializing the city has occured, and thus after creating the arrays). If your size increased, it would cause you to exceed the array which had been made too small.
But for the Jotnar they are shrinking their size, so if this was the issue it wouldn't affect them. In their case though I think the issue is that the game is sometimes assigning the initial plot worked to be a plot in the second ring of the city, then a building comes along and shrinks the workable area. At this point, I bet a loop is done over LOCAL WORKABLE tiles (now 1 ring) to remove all working of plots (thus misses our current worker, who is now working an illegal plot), and it assigns the 1 worker which it SHOULD assign to the best available plot. During a later update it sees "I can work 2 plots, because I am working 2 right now!" and moves that guy working an illegal plot back into the legal options.
Similar could be happening with the Kurio, and it happens when city size is changed by promotion of a settlement (change from 1 ring to 3). That would be why nothing shows up in the OOS log (about to go add settlement/full city printout) except more gold. You wouldn't notice an extra worker until they provided spare gold, or enough beakers/hammers/food to finish something earlier than expected.
If this is right, all current workers need to be unassigned before the number of workable tiles value is adjusted on the city, then immediately re-assigned afterward. As well as any arrays which exist for number of workable tiles being created for MAXIMUM workable, not local, and being initialized properly so that all non-workable array items have appropriate data for a future time when they do become workable.