I can't solve it I think...
The main reason is that the XmlWriter passed into the IXmlSerializable implementation doesn't have a start-element set. So when you pass back 2 or more entities, the first entity XML element is the root node of the xml and the second is written into the same stream, which clashes as it will then make 2 root nodes appear in the xml stream.
I can't detect in the routine if some other entity has already been written into the stream. I peeked into the dataset code, and there they do exactly the same, so I wonder if it's possible to pass back 2 or more datasets to a webmethod. That would cause the same error, though I'm not sure. I can't find any other person having the same error...
As a workaround, you could add hte entities to an EntityCollection and pass that to the webmethod.
(not nice, I know, though I can't detect if the XmlWriter already has a startelement or not, so I can't write a startelement if that's not already been written...)
If someone knows an answer to this, please let me know.