Nie ma w tym nic magicznego, pojawia się błąd, ponieważ połączenie, którego używasz podczas wstawiania CompanyAddress, nie jest tym, o którym myślisz.
To nowe połączenie. Po uruchomieniu wstawiania ComapnyPaymentInfo korzystasz z połączenia, które jest już powiązane z Twoją transakcją. Oczekuje na nowe polecenia, ponieważ czekałeś w poprzednim kroku.
Z drugiej strony użycie Task.WhenAll() spowoduje próbę użycia wielu wątków. Jeśli połączenie jest zajęte wykonywaniem polecenia, nie zostanie ono użyte i pojawi się nowe.
Pamiętaj, że korzystając z Transakcji, masz tylko jedno dostępne połączenie, nie możesz korzystać z równoległości.