Background: I've got a co-located server running W2K8R2. The physical machine is assigned multiple IPV4 addresses, one per hosted domain. I wanted to have a light-weight Linux VM to install both OpenCloud and Wordpress, as well as having a regular HTTP server. The intention was to use a spare IP address to host a new domain within the VM. This meant that all services should be accessible via the usual ports HTTP:80 and HTTPS:443 for example).
1. Ensure the IPV4 address in question was bound to the physical NIC. The address should be added to the list in the IP settings tab of 'advanced' properties.
2. Make sure that the VM is correctly configured with NAT enabled and that the port forwarding settings specify the host IP address used in 1. As a basic test I forward port 80 on the host to a really simple HTTP server running on port 50000 on the guest (as a sanity check in case your distro has Apache running by default on 80). The picture below also shows 443 is being forwarded.

3. Now, in order for forwarding to work correctly you have to unbind IIS from listing on 0.0.0.0. This is critical to correct operation. If you run an administrators command shell, you can use the netsh command to instruct IIS only to listen on specific addresses. The magic here is:
add iplisten ipaddress=nnn.nnn.nnn.nnn
where the IP4 address is that which you want IIS to handle. You will need to repeat this multiple times if you have multiple IP addresses.
Do not add the address which is going to be forwarded to the VM!
4. Now, if the VM is running, a browser on the host should be able to access the HTTP server on the guest system. If not recheck steps 1 through 3. Note that the guest HTTP server will not be externally accessible yet.
5. The home stretch. The excellent Currports utility http://www.nirsoft.net/utils/cports.html shows both listening ports and the associated process.

Note that VirtualBox is now listed as listening on port 80 alongside IIS (which has PID 4). This utility is also useful for verifying that forwarding is in effect, as those ports assigned to VirtualBox will become immediately visible ...
6. If you run a port scan on the guest IP address you should find that port 80 is blocked. This is now because the Windows server firewall is getting in your way. Finally, then, add a new firewall rule to open port 80. In this case I added a basic rule that referenced virtualbox.exe in the 'Programs and Services' tab, and then went on to specify specific ports (80/443) in the 'Protocols and Ports' tab.
7. You should now be good to go.
[Later ...]
8. If you want to run the VM as a service then I would recommend this utilty which is extremely simple to configure http://vboxvmservice.sourceforge.net/
Note that once again you will need to change the firewall rule(s) as in this case the virtual machine will be running under one of the system accounts and not virtualbox.exe itself. To get this to work I add to extend the existing HTTP firewall rule to allow access from domain, private and public profiles (see the Advanced Properties tab). Without this access to port 80 will remain blocked.
The essential thing here is that if port forwarding is failing, make sure you do not have some service/server that is listening on the entire scope.
Hope this helps someone else. Any comments or additional ideas welcomed.
Thanks to all who helped me get this far.