De dos documentos (para SQL Server compacto, mas ainda relevante):
No primeiro exemplo, você está abrindo uma conexão em um escopo de transação. No 2º você não está se alistando.
Tente adicionar:
cmd.Connection.EnlistTransaction(Transaction.Current);
Para ver se isso ajuda.