After the kscreen merge, panel struts are always 0 here, meaning that windows always go below panel. The struts are nulled only in multiscreen setups so it's definitely related (see panelview.cpp updateStruts()). Might also be related to this line in plasma-shell output: ShellCorona::screenInvariants: error: couldn't find primary output KScreen::Output(Id: 638 , Name: "DVI-I-0" ) Indeed it seems I don't have a primary screen set, but that should not break things.
This can also be checked by using xprop tool on the panel where it currently returns _NET_WM_STRUT(CARDINAL) = 0, 0, 0, 0 _NET_WM_STRUT_PARTIAL(CARDINAL) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Turns out my config somehow got the "Windows go below" setting turned on, which seems to be the cause of this. Deleting config files and trying with empty one shows it's working correctly. My bad.