No hay nada mágico aquí, obtienes el error porque la conexión que estás usando al insertar CompanyAddress no es la que crees.
Es una nueva conexión. Cuando se ejecuta la inserción de ComapnyPaymentInfo, está utilizando la conexión que ya está vinculada a su transacción. Está pendiente de nuevos comandos porque los has esperado en el paso anterior.
El uso de Task.WhenAll() por otro lado intentará usar múltiples subprocesos. Si una conexión está ocupada ejecutando un comando, no se usará y se generará uno nuevo.
Recuerda que al usar Transacciones, solo tienes una conexión disponible, no puedes beneficiarte del paralelismo.