Aunque dices que las transacciones son explícitas, puede que algo ocurra y se quede la transacción pendiente de ser cometida, no obstante pareciendo que sí se ha confirmado. Luego, algo ocurre con el servidor y éste cancela esa transacción (desapareciendo información de la base de datos), ya sea por llegar a un tiempo límite de espera o por alguna operación que muy probablemente no se realiza a diario (respaldos, por ejemplo).
Ante esto, quizá convenga revisar cómo estás manejando las transacciones. La recomendación es nunca abrirlas y cerrarlas explícitamente desde el lado cliente, sino dejar esa tarea al servidor (de aplicaciones o de base de datos).
No espero que lo anterior sea de mucha ayuda, pero en algo puede servir.
Casi, el artículo que enlazas es muy interesante. Suelo hacer todo lo que ahí se sugiere, pero confieso que a veces fallo en el punto 5 (mi apetito por las
causas).