Let's try to exclude the option that transformation scripts get randomly delayed. Try wrapping transformation scripts in something like
trace(0, $object->id . ":" . $dci->id . " tranformation script start");
...
trace(0, $object->id . ":" . $dci->id . " tranformation script end");
first parameter of trace() defines the log level. This way you should get some stats on the actual duration of the transformation scripts.