Z dokumentacji (dla SQL Server compact, ale nadal istotne):
W pierwszym przykładzie otwierasz połączenie w zakresie transakcji. W drugim nie jesteś zaciągnięty.
Spróbuj dodać:
cmd.Connection.EnlistTransaction(Transaction.Current);
Aby sprawdzić, czy to pomoże.