NAT should preserve TOS field => Fixed in SVN
When using NAT as the network interface, traffic initiated by the VM where the application will set the TOS field for QoS or where the VM acts as a router and the traffic is initiated by a e.g. phone with the TOS field set will be re-marked with TOS=0 when going through the NAT process.
VoIP App running on VM -- NAT on VM Host -- Router
Phone -- VM/Router -- NAT on VM Host -- Router
Assuming the phone or the VoIP app set voice and signaling traffic to some specific value (typically RTP is marked with DSCP EF and SIP signaling with DSCP CS3) the NAT process on the VM host will zeroize the TOS field so that the router at the right handling the traffic can not differentiate between important voice traffic and e.g. bulk data anymore resulting in degradation of voice / video quality.
When the traffic is bridged (in both above cases) the TOS field is preserved. When the traffic is NATed, the TOS field is set to zero regardless what it has been set to before.
Ideally, the VBox NAT process would look at the incoming TOS field of each packet and create the outgoing packet with that TOS field, typically using RAW BSD sockets.