Non c'è niente di magico qui, ottieni l'errore perché la connessione che stai utilizzando quando inserisci CompanyAddress non è quella che pensi che sia.
È una nuova connessione. Quando viene eseguito l'inserimento di ComapnyPaymentInfo, stai utilizzando la connessione che è già collegata alla tua transazione. Sono in attesa di nuovi comandi perché hai atteso nel passaggio precedente.
L'uso di Task.WhenAll() d'altra parte proverà a utilizzare più thread. Se una connessione è occupata nell'esecuzione di un comando, non verrà utilizzata e ne verrà generata una nuova.
Ricorda che quando utilizzi Transazioni hai una sola connessione disponibile, non puoi beneficiare del parallelismo.