If you're working with BizTalk, then you owe it to yourself to go read Tomas Restrepo's latest post.  In short, he has located a bug in how the XmlDisassembler handles the <?xml?> declaration to determine encoding.

If the XmlDisassembler pipeline component encounters <?xml version='1.0' encoding='UTF-8'?> it will throw an exception which has nothing to do with the real problem.  It has no problem with <?xml version='1.0' encoding="UTF-8"?> though.  Go read Tomas' article for the full details.  Great job Tomas in chasing this down!