Hola:
Creo que deberías modularizar mas tu código, el típico divide y vencerás y la verdad creo que te ayudará mucho para no tener estos problemas, mientras mas pequeñas sean tus piezas de software mas fácil es encontrar un error, viendo tú código pienso y creo que puedes optimizarlo mas en este sentido.
¿Has intentado debugear tu aplicación para ver si realmente hace el rollback..?
Hasta Luego -