OK I was able to get this to work in memory. I guess the behaviour when you save the file is different than when you just work in memory.
I if do it thusly it works:
// open our template and do our quick search and replace
var templateDoc = new WmlDocument(templatePath);
templateDoc = TextReplacer.SearchAndReplace(templateDoc, "<TitlePageGroupAndCode>", _caTitle, true);
templateDoc = TextReplacer.SearchAndReplace(templateDoc, "<TitlePageBargainingAgentName>", _bargainingAgentName, true);
templateDoc = TextReplacer.SearchAndReplace(templateDoc, "<TitlePageGroupName>", _groupName, true);
templateDoc = TextReplacer.SearchAndReplace(templateDoc, "<TitlePageExpiryDate>", _expiryDate, true);
templateDoc = TextReplacer.SearchAndReplace(templateDoc, "<CopyrightBargainingAgentName>", _bargainingAgentName, true);
Cheers,
Garth