It occurs to me I might be dealing with an implicit type conversion problem. I'm guessing DatePart() returns an int, and I'm guessing int is a higher order of precedence than string in VBScript. In that case, the "0" would be converted to int, rather than the DatePart() return value being converted to string. So instead of "0" + [int] returning "0[int]" it returns [int].
Therefore...
%{Right("0" + CStr(DatePart("h",Now())), 2)}%%{Right("0" + CStr(DatePart("n",Now())), 2)}%.pdf
...should work. I'll have to wait another 40 minutes to test it unfortunately.
UPDATE: Yep, that was it.