not really. I ended up just doing this. Still think that maybe there's some code out there to make this less manual.
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline;
var unnamed = new Regex(@"\[TextIfUnnamed\](.*?)\[\/TextIfUnnamed\]", options);
var loginLink = new Regex(@"\[LoginLink\](.*?)\[\/LoginLink\]", options);
var temp = emailTemplateBody;
temp = temp.Replace("[LastName]", user.LastName);
temp = temp.Replace("[FirstName]", user.FirstName);
temp = unnamed.Replace(temp, x => x.Groups[1].Value);
temp = loginLink.Replace(temp, x => MakeLink(loginUrl, x.Groups[1].Value));
private string MakeLink(string url, string text){ return String.Format("<a href='{0}'>{1}</a'>", url, text); }