What if you try ${Node.Caption}?
Also, I would be curious to know if ${NodeName} is actually looking at the SysName column in the DB, and if this field is populated for the devices in question. I've seen the "test alert" function do some funky stuff, so I don't completely trust it.
You may also want to try just ${Caption}. I'm not sure you actually need to specify the table.
Can you export the alert def to a file and post it here?