I looked into this a bit but haven't found the bug yet. Special keys are handled with macros. I believe WM_KEYDOWN catches all keys that aren't handled with WM_CHAR and then inserts a macro for that key into the input stream. The macros all match vanilla, so I dont know what is going wrong.
With the up arrow numpad ('8') what looks like the correct hex string is sent, but that is converted to '141' later which looks a bit suspect to me. Anyway it ends up with CMD_UNKNOWN instead of ;8. I should probably look in more detail at what the Vanilla Angband version does.
Found a workaround (but not a fix). Setting keymaps or macros for the keys that don't work (mostly) does the trick. N.B. Numlock needs to be off or running won't work.
# Macro '6' A:;8 P:\[Up] # Macro '9' A:;4 P:\[Left] # Macro '11' A:;6 P:\[Right] # Macro '14' A:;2 P:\[Down] #keymap A:;2 C:0:\x8A A:;4 C:0:\x8B A:;6 C:0:\x8C A:;8 C:0:\x8D
Effect of shift with numpad is not being handled properly when numlock is on.
In a little more detail:
numlock on :
numlock off :