Não sei como a transação "aninhamento" é feita no Hibernate (já que não acredito que o MySQL possa realmente aninhar transações).
Então, eu diria que a segunda transação (aninhada) deve (?) ser uma nova conexão com o banco de dados - caso contrário, não seria possível reverter a transação "aninhada" sem afetar a transação "externa".
Se este for realmente o caso, você provavelmente será atingido pelo nível de isolamento padrão do MySQL, que é
REPEATABLE READ
que não permitirá que a transação externa veja os dados que foram confirmados depois essa transação começou. Para testar essa teoria, tente alterar o nível de isolamento (da transação externa) para
READ COMMITTED
e veja se isso resolve o problema.