What I did to resolve this is copying the url of the 'manual' preview and putting that into an Iframe. I tested it for an HTML template but the same principle should work for a VisualForce template I'd think:
<apex:iframe title="Preview"
id="previewFrame"
scrolling="no"
frameborder="0"
height="961"
width="665"
src="{!ContentUrl}/email/templaterenderer?id={!templateId}&related_to_id={!theOpp.Id}&preview_frame=previewFrame&base_href={!BaseUrl}&render_type=REPLACED_HTML_BODY" />
The following APEX variables are used:
public Id templateId {
get{
if(templateId == null){
EmailTemplate template = [select Id from EmailTemplate where DeveloperName = 'The_Email_Template'];
templateId = template.Id;
}
return templateId;
}
private set;
}
public String getBaseUrl(){
return System.URL.getSalesforceBaseUrl().toExternalForm();
}
public String getContentUrl(){
return System.URL.getSalesforceBaseUrl().toExternalForm().replace('.visual.force.com','.content.force.com');
}
Lastly, theOpp.Id is in this case the Opportunity Id but can be any Id of the relatedto record for the email template.