Thanks Chad, just the sort of thing I was looking for!
I checked out the examples of the merge field suboption of the character function action. So if I understand this correctly, if I type in "Vendor" into the "replace from table" field, and put my desired Vendor record ID as an Action Result in the next field, then the function will go lookup every merge field in my template referencing the Vendor table (Vendor.FullName, Vendor.BillCity), and replace it with that particular record's data.
Or, as another example: If I want to email a Purchase Order PDF to a vendor in the New Activity screen, the only field I need to add to the Activity table would be for the PO Record ID (since I use that screen to send all my order reports, I call it "RelatedRecordID", and I have a second field for "RelatedReportType" to specify that its a Purchase Order record).
Then I can create a conditional statement in the Choose Template action list in the New Activity screen saying that if the RelatedReportType is "Purchase Order", then grab the RelatedRecordID as an AR, and use the character function to specify that every PurchaseOrder merge field in the template should reference that RecordID. That way I can get the right vendor name (presumably all the preexisting "entity" based actions in that list wouldn't work, because there's no way for them to know that by "Vendor" I mean the preferred vendor selected for my PO...)
I notice in the preexisting merge field actions in the New Activity screen, the email body is loaded into an AR and then referenced. Is there any particular reason why it is used as an AR, instead of just pointing to the email body "Value on Screen"?