Silly me, I should have been using Saml2SecurityTokenHandler
rather than just SecurityTokenHandler
which is an abstract class.
This solved my problem:
public static void DupmToken(Saml2SecurityToken token)
{
var handler = new Saml2SecurityTokenHandler();
var sw = new StringWriter();
handler.WriteToken(new XmlTextWriter(sw), token);
Console.WriteLine(sw.ToString());
}