Further comment, I've found a resolution to this problem and found its actually expected behaviour from reading the JSF specs.
In JSF you configure it to specify which locales you support using the <locale-config> element on the <application> element in the faces-config.xml. JSF then uses this information and pulls out the correct locale from this list based upon the one supplied by the user (or more acurately their browser). If the locale the browser want's isn't available, JSF uses a default locale.
If the <locale-config> element is not specified, the spec's don't define how JSF should determine the available locales. I guess this is where the difference between the RI and MyFaces must occurr - the RI must just pull the locale of the underlying JVM (which is probly en_US in your case), whereas MyFaces may return what it deems to be the default locale (probly just en).
To fix this, i added the following to my faces-config.xml:
This should use USD if the browser is in US, GBP if the browser is in GB, and GBP otherwise. Doing the above ensures that even if the browser just supplied 'en' as the locale, I would still display a GBP symbol.
As you want USD, you would want to change the <default-locale> element to en_US.