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!