Unless something has changed in Message Queue over the years, you cannot simply cast as a type, as there is no magic to convert the XML to the type you desire. If there is some newer magic I am unaware of, the object would be serialized underneath the hood and the plumbing is added to MSMQ or the abstraction for .NET (or C#) to do it. You can debug through the .NET bits now, if you are really interested, by adding the Microsoft repositories.
In general, serialization is not automatic. You can cast from a general type to a specific type only when there is a proper cast available. Otherwise the cast fails. WCF has some magic in it, but it is largely in the generated proxy, with a bit in the internals (if you prefer, use plumbing instead of the word magic).
Also, in general, it is a bad practice to rely on magic. In most cases, you should explicitly state the serializer when you pull from a queue and then use it to regenerate the objects. I allow some forgiveness for WCF. Please note that this is a more general statement, as relying on default behavior, especially when it is not documented, can lead to future disasters.