Da i documenti (per SQL Server compatto, ma comunque rilevante):
Nel primo esempio, stai aprendo una connessione in un ambito di transazione. Nel 2° non ti stai arruolando.
Prova ad aggiungere:
cmd.Connection.EnlistTransaction(Transaction.Current);
Per vedere se questo aiuta.