I have fought at great lengths with gremlins within external BPM contexts in throwing PartBin, PartQty, and PartWhse tables out of sync.
These two little lines of code after each transfer should initiate the processing of the deferred items so that you can initiate another transaction with the same key.
Erp.Internal.Lib.DeferredUpdate libDeferredUpdate = new Erp.Internal.Lib.DeferredUpdate(Db);
libDeferredUpdate.UpdPQDemand();