It's a pedagogical doozy.
For example, try this:
[; test list foo bar(
Now you'll get identical behavior with the dollarsigns and [unpack]. So let's confuse ourselves even more:
[; test listless foo bar(
Oops, it's different again. What's going on?
It turns out that [unpack] and some other objects have a "convenience" method if you send them something other than a float, list, or symbol message. Message boxes don't do that-- if you look at the Pd window you'll see that the message box gives you an error:
"$2: argument number out of range"
Unfortunately it won't highlight the source of the error, which is the [set $1 $2( message box.
That error is a _good_ thing, btw. If message boxes could talk, they might apologize for making dollarsign variables start at one for numbers and zero for everything else. On top of that they might apologize that $0 doesn't actually expand to the selector of the message. But [unpack] would need to apologize for remaining silent when it treats "foo bar" the same as "list foo bar", and leaving you clueless when a subtle bug arises from treating different data as if it's the same.