ここには魔法はありません。CompanyAddressを挿入するときに使用している接続が、思っている接続ではないため、エラーが発生します。
新しいつながりです。 ComapnyPaymentInfo挿入が実行されると、トランザクションにすでに関連付けられている接続を使用しています。前の手順で待っていたため、新しいコマンドは保留中です。
一方、Task.WhenAll()を使用すると、複数のスレッドを使用しようとします。接続がコマンドの実行でビジー状態の場合、その接続は使用されず、新しい接続が生成されます。
トランザクションを使用する場合、使用できる接続は1つだけであり、並列処理のメリットを享受できないことに注意してください。