I put this down to the Ai being sent a distance greater than theLevelInfo.visibleGhostDistance. Inside this distance and mountedObjects stick to the aiplayer, beyond it mounted objects are abandoned at their previous position. If the aiplayer teleports back the mounted objects are still abandoned. If function is called on the mounted objects, they will resume to the aiplayer's current location: eg: %aiplayer.unmountObject(%mountPoint);
I got around this by simply telling the aiplayer to check for mounted objects and set their positions to the current one.
function AIPlayer::teleportMounts(%aiplayer, %xyz)
//use the mountedObject array
%num = %aiplayer.getMountedObjectCount();
for(%i = 0; %i < %num; %i++)
%mount = %aiplayer.getMountedObject(%i);
However I'm thinking this would probably be best automated in C++ by forcing object to setPosition when host object is setTransform/setPosition itself.
Or just have really big visibleGhostDistance set in theLevelInfo.
Anyhow, it's just a behaviour which I have observed.