Você provavelmente encontrou este bug no MySQL Connector/NET .
O que aciona esse bug:
- Chamadas de código para execução da consulta A
- A transação 1 da consulta A foi iniciada
- A consulta A é executada e causa um erro no MySQL
- A transação 1 NÃO é revertida
- Chamadas de código para execução da consulta B
- A transação 2 da consulta B foi iniciada
- O MySQL Connector/NET lança a exceção
O bug é o ponto 4:a transação 1 é deixada em aberto após um erro (ou pelo menos o conector ainda está convencido de que foi deixado em aberto). Devido ao pool de conexões, o código que chama a consulta A e a consulta B podem ser completamente não relacionados. Além disso, se o tempo entre o ponto 4 e 5 for longo o suficiente, a transação é revertida, daí a raridade e aleatoriedade.
Infelizmente ainda não há correção pelo MySQL. A única solução que conheço é baixar o código-fonte do Connector/NET e corrigi-lo/construir você mesmo.