I've found the problem.
Unfortunately it was the result of the lot of trying and commenting in-out, and at some point the problem was solved while creating a totally new one.
In some part of the IExternalCommand::Execute was a return "Result.Cancelled", where I attempted to stop the function... And it rolled back everything.
Anyway, it's a little bit confusing behaviour, as the function acts like a Transaction group itself. In Automatic mode makes sense, but in Manual mode I'm not sure it is the right way to rollback a successfully committed other Transaction.
Thank you for the helps, I hope the post gonna be helpful for others to avoid this problem.