This is not really that formidable. You have the use of an Xml Parser that will do all the grunt work for you. When you assign any string to an xml node the parser will automatically do all the required escaping for you. When you retrieve the text it will be unescaped for you.
In an orchestration you can assign the message to an XmlDocument variable and the assign the XmlDocument.InnerText to a distinguished field on the SQL message e.g.
xmlDoc = inputMessage;SQLMessage.XmlDataField = xmlDoc.InnerText;
If you want to do this in a map, you can create an external assembly like this:
public class ConvertNode { public static string ToXmlString(XPathNodeIterator node) { return node.Current.OuterXml; } }
and call it from some custom Xslt (you need to declare your Custom Extension Xml as appropriate)
<xsl:element name="XmlDataField"> <xsl:value-of select="ConvertNode:ToXmlString(.)"/></xsl:element>