Found the solution. When the external port does not match the internal port, 2 different services have to be used. If neither service is pre-defined, then 2 "custom services" have to be defined-- one referencing the external port, and one referencing the internal port. As an example, consider the following. Port 9100 is a standard listening port for printing.
External port: 9105
Internal port: 9100
Create 2 custom services.
1) External_Printer_Access_9105. Set it for destination port 9105.
2) Internal_Printer_Access_9100. Set it for destination port 9100.
In your policies, Untrust to Trust, permit inbound connections to service "External_Printer_Access_9105" on the VIP interface. This allows connections to enter via port 9105.
On your untrust interface, create a VIP on port 9105 and map to service "Internal_Printer_Access_9100". This maps port 9105 onto internal port 9100.
This was a bit of a head scratcher, but we've been successfully using for more than a week and it works great.
Thanks to all who tried.