Wow, well that really did help. Your code works and was configured exactly how we have it configured.
As it turns out, I was relying on already existing code in our codebase that converted the file to a stream. My bone-headed mistake was thinking that this code produced a base64 string. It did not. I noticed after going into the debug view of your code and noticing that the string value for the asset was very different from the value in my application.
Making sure the asset got converted to base64, as well as using the TemplateAsset= new Asset in your example produced a working file. What's really threw me off JsReport was still able to manipulate the template and create a new file despite the original not being in the correct format. Very unexpected.
Anyway, thank you for taking the time to help. Very much appreciated.