Have you thought about using the XSD code-gen tools? They can deserialize/serialize and validate via schema orders of magnitude faster than other techniques in C#. You can use partial classes or wrapper classes to add additional fields or object hierarchy for your domain business logic.

    xsd.exe schema.xsd /classes

Some code I lifted from here: http://snipplr.com/view/2660/serializing-and-deserializing-a-class-created-with-xsdexe-using-xml-strings/

    public static string SerializeToXmlString(object targetInstance)
    {
        string retVal = string.Empty;
        TextWriter writer = new StringWriter();
        XmlSerializer serializer = new XmlSerializer(targetInstance.GetType());
        serializer.Serialize(writer, targetInstance);
        retVal = writer.ToString(); 
        return retVal; 
    }

    public static object DeserializeFromXmlString(string objectXml, Type targetType)
    {
        object retVal = null;
        XmlSerializer serializer = new XmlSerializer(targetType);
        StringReader stringReader = new StringReader(objectXml);
        XmlTextReader xmlReader = new XmlTextReader(StringReader);
        retVal = serializer.Deserialize(xmlReader); 
        return retVal; 
    }

If you can't use XSD.exe (as you imply in your comments) then how about writing a few helper class functions that use XmlDocument.Validate right as you receive or send the messages? http://msdn.microsoft.com/en-us/library/ms162371.aspx You wouldn't really be duplicating validation code if it's a shared component.

From their nice example:

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
    settings.ValidationType = ValidationType.Schema;

    XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
    XmlDocument document = new XmlDocument();
    document.Load(reader);

    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);

    // the following call to Validate succeeds.
    document.Validate(eventHandler);