A resolution to this question was reached here.
The tl;dr is that you can only have ONE docker service on the backend which has a VIRTUAL_HOST variable, and it must correspond with the domain that the frontend is using.
If you have multiple backend services, and therefore multiple VIRTUAL_HOSTS, you will need to set the HOST header dynamically on the frontend so nginx-proxy knows where to route your request. But, as we now know, this is not possible because browsers will not allow you to dynamically set the Host header.
My solution was to replace nginx-proxy with a vanilla nginx config and rely on URL namespacing for service routing rather than trying to set the Host header.