Creating a Generic Template Interface/Class and injecting into another object
The template related class and interface are looking good to me. But the generator related class and interface are flawed.  

Assume one would call the Generate() method with an ITemplate&lt;string&gt; which would be totally legal. Sure it would work, but xmlDocumentBody would be null.  

You could if the passed in template isn't a ITemplate&lt;XmlDocument&gt; throw some exception, but a user of this class wouldn't expect for a generic class which is called correctly to get an exception.

So you should better make the IDocumentGenerator generic and not the Generate() method.  

public interface IDocumentGenerator&lt;T&gt;
{
    void Generate(ITemplate&lt;T&gt; template, string outputDocumentFilepath);
}


and now your WordDocumentGenerator class should implement IDocumentGenerator&lt;XmlDocument&gt; like  

public class WordDocumentGenerator : IDocumentGenerator&lt;XmlDocument&gt;
{
    public void Generate&lt;T&gt;(ITemplate&lt;XmlDocument&gt; template, string outputDocumentFilepath)
    {
        XmlDocument xmlDocumentBody = template.GetContent();

        // generate doc
    }
}


For sure if you have different types of templates you should add a DocumentGeneratorFactory which returns the desired DocumentGenerator for the task at hand.