I think I have zeroed-in on the issue (but not solved it yet). The missing puzzle piece was SDL.
Emulationstation is built on top of SDL, which has its own keyboard library. Something is not accounting for modifier keys: either the SDL the way emulationstation is written.
I think there is still hope as the debug log (see end) can see that both Arrow key and Shift and it even shows that my keys are mapped to both down and up in es_input.cfg. Just need to find a way to access that second option in some way.
Anyone has an idea how I can access the second value of my key, or knows their way around emulationstation source so I can add the function myself?
Edit:
I found where F4 is hardcoded for emulation station, which makes me think I can hardcode arrows + shifted arrows in a similar manner. It is not a great solution, but it is something...
The only problem I have is that I don't know how to build my own version of emulation station with the changes if I made a copy to my own github.
Also, I don't know SDL well enough to code it myself. Anyone able to translate my pseudocode into actual SDL and cpp?
IF keydown(shift) AND keydown(down) THEN
return up
END
Also, happy to hear any other solutions!