The downside is pretty much just the problem you ran into. The other, usually bigger, problem (which sounds like it's less likely to crop up in this particular case) is if you change something, making sure all references get properly changed.
Why don't you think a singleton approach would work in this case? If there should always only be one instance of an order, a singleton would be perfect. I guess you could have multiple simultaneous orders, but that sounds like it'd get quite complex on the end-user side.
The other approach you could use is to split the properties of the order from the array of products it contains. Then, you could pass in just that object and avoid the redundancy.
So, say all the properties of Order get split into OrderProperties. Order contains an instance of OrderProperties and the array of Products. Products is then passed a reference to OrderProperties.
Just some suggestions.