and a.b, and b.c are embedded.
We do the following updates
The first update will call SM.setXXXField. This calls SM.replaceField(pc, field, value, makeDirty) and cascades up to its owner. This then calls ec.makeDirty(a) followed by ec.makeDirty(c), and the second call triggers flushInternal in ObjectManagerImpl (due to reaching the limit of dirty objects). At this point the only object dirty in the ObjectManagerImpl is A. The call to ec.makeDirty(c) then completes marking it as dirty.
The second update then calls ec.makeDirty(a) which again triggers flushInternal. The dirty flag on the "c" hasn't yet been updated so anything in a store plugin relying on that information will fail.
This has likely been the situation since day 1 of supporting embedded objects