Why is % forbidden char in THROW message?
It appears that they left the printf functionality (or at least part of it) in the THROW command but did not include a way to pass in a parameter to it.  I tried each of the characters listed in BOL for RAISEERROR as possible "types" %(d, i, o, s, x, X, or u) and each of them gave back a blank.  Any other character after the % and you get back a valid string.  My guess is that they are replacing the value with a NULL which of course causes any string concatenation to return a NULL and when printed looks blank.

Unfortunately without the code behind it (or at least a MS Developer) to confirm there is no way to be certain.