It appears that Flash (rather than the browser) attempts to convert anything in the bgcolor attribute to an RGB colour?!
It doesn't seem to be correct. Please try the following valid code...
In this case the browser is converting the "#transp" to the same RGB colour value (a dark green), which is understandable. However, other values like "#transparent" and "transparent" do appear to give a different value when compared to the embed bgcolor attribute.
I think the bgcolor attribute of the embed element is unique in that the Flash movie itself appears to read this value in order to colour the background of the flash movie itself (as documented on the page you link to) - not the background colour of the embed container, or does it do that as well? I'm speculating, but that is what appears to be happening.
This also might explain why changing the bgcolor attribute once the page has already been parsed has no effect. I assume the Flash movie somehow reads this attribute when the Flash file is first loaded. When it is changed later, Flash doesn't pick it up? But then it might just be a browser quirk... preventing the bgcolor attribute from being set.
You can often set the property directly: document.getElementById("foo").bgcolor = "#00FF00"; (If the property name is the same as the attribute. Case-sensitive, so 'bgcolor' is different to 'bgColor' in this instance.)
I'd certainly have a look into using SWFObject as Fotiman suggests.