The GPS is not needed by the EKF to estimate the speed, it uses both the accelerometer and the baro to calculate the velocity. I flew quite a while with and without GPS and looked pretty closely at VD (speed down) and PD (position down) for a problem I had in AltHold. In the end, PD and VD were working fine without GPS speed.
In my case the GPS readings were wrong, but it only impacted VD and NOT PD. This doesn’t seem to be your case at all because your PD is wrong.
If you think it, somehow, comes from the GPS that you have not, try EK2_GPS_TYPE =1. This will tell the EKF to not use the GPS for vertical speed.
I can’t help you with the quaternion stuff but it could be the issue.