I'm confused here, the copy function will only be called if the Queue is shared. If the queue is not shared (by explicitly calling QueueCopy(...)), then the copy function will never be called.
As Edward explained, the requirement for a copy function is a consequence of the COW/rc implementation. We can discuss this in more detail over a beer this weekend :-)