It turns out that this game is windowed, fake fullscreen. It sets the resolution "manually" before DX is initialized and then renders into a borderless window.
The problem is that resolution cannot be forced for windowed mode applications. If I experimentally change the requested presentation parameters coming from the game to real fullscreen in the debugger then both of the methods I described works (altough there are glitches on the 2D screen, even with integer (2x) upscale ratio).
I don't know if there is a way to set the game to true fullscreen rendering. I cannot see such an option in config.exe but the code setting the dx windowed/fullscreen presentation parameter does not seem to be hardcoded either.
There is a "WINDOWED": false, element in the Bmt2_config.json file but that only controls if the game is real windowed or fake fullscreen windowed.