BTW, when I set the state type to be a string on the first node, everything works as expected. Regardless, I guess I've got some learning to do with template nodes and JSON expressions
[{"id":"b4d57cfc.84d048","type":"server-state-changed","z":"50672f44.f293b8","name":"Front Door Lock Battery %","server":"61613ba9.2caa64","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.front_door_lock_be469_battery_level","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"50","halt_if_type":"num","halt_if_compare":"lt","outputs":2,"output_only_on_state_change":false,"x":130,"y":720,"wires":[["5f06c63d.7cd2c8","519ff7fc.30dbe"],["5f06c63d.7cd2c8"]],"icon":"font-awesome/fa-battery-2"},{"id":"5f06c63d.7cd2c8","type":"debug","z":"50672f44.f293b8","name":"Battery Level","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":350,"y":760,"wires":[]},{"id":"519ff7fc.30dbe","type":"change","z":"50672f44.f293b8","name":"Create e-mail message.","rules":[{"t":"change","p":"payload","pt":"msg","from":"^(.*)$","fromt":"re","to":"Battery level is below 50% ($1%). Replace/recharge.","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":720,"wires":[["464a6de3.ddc964"]]},{"id":"464a6de3.ddc964","type":"debug","z":"50672f44.f293b8","name":"Change Msg to Create E-mail","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":670,"y":760,"wires":[]},{"id":"61613ba9.2caa64","type":"server","z":"","name":"Home Assistant","legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":false}]