I've read your post a couple of times and I'm still confused on a few points. No service should ever negotiate source ports because they're not reliable. I'm also confused as to which endpoint is the client and which is the server in this communication stream.
You can prevent some port translation with port forwarding. Use the Add-NetNatStaticMapping cmdlet. The example shows a static translation from 80 to 8080, but if you omit the InternalPort parameter, then Hyper-V won't change it. If you just don't know which port it will be, then you could call the script enough times to set all port values in the expected range. But, if you're going to do that, then I don't understand why you'd use NAT at all. Just set up a standard External Hyper-V switch and give the guest an IP on the same network as the host.