Esta parte del código es diferente entre FibPlus e IBX
Código Delphi
[-]
while seguir do
try
T.StartTransaction;
Q.ExecQuery;
T.Commit;
Seguir := false;
+-------- DMDatos.Rollback;
| AbrirTablas
| except
+-----> end;
En principio, si se genera la excepción no ejecutas el rollback.
Creo que deberías poner el Rollback en la parte del except.
También puede ser que tengas CacheUpdates = true.