Hi,
Check your Assignment object's attributes... Are you sure the field exists just as "{Id}" on the Assignment object? I would guess that you need to include the process ref as well.
e.g., within an Incident assignment, reference it as {Incident/Id}
I use calculations setup on the Process Assignment object (under Process Management) that cascades to Assignments for ALL processes (I/P/R/C). In general, it uses String.Format to setup the HTML body/Title/etc., and I haven't noticed any problems inserting the field values. The calc for Title (a.k.a., Subject) looks like this:
ProcessRef = "${ProcessAssignment.Process.Class.Name} ${ProcessAssignment.Process.Id}"
Message = String.Format("{0} has been assigned to {1}", ProcessRef, msgRecipient)
If you want to see the rest of the setup to draw from, I have a doc posted here on standardizing notifications.
-Brian