It looks like you've run into a bug in Bitcoin Core
Specifically, for historical reasons, Bitcoin Core will sometimes automatically convert P2PKH scripts into P2WPKH outputs when doing segwit stuff. So what happened is that when it checks whether the redeemScript matches the witnessScript, it mistakenly computes the P2WPKH script for your P2PKH witnessScript instead of the P2WSH script that you are expecting. This causes a mismatch and the error.
You could try omitting the redeemScript field from your call to signrawtransactionwithkey but it may fail to sign then.