I’ve run out of options – I think I can no longer ignore the Kalman filter.
First though a step back: I found what I’d remembered about converting gyro rate in the quad frame back to the frames used by the rotation matrix. It’s a really nice easy read, and accurate; but there’s once critical omission – it relies on knowing the angles to convert the gyro rotation rate and hence gyros. There’s also this which explains why minor errors in angles can lead to major errors in distances, which is the problem here. So I think this again is a dead end.
Which brings me back to the Kalman filter to remove net acceleration from accelerometer readings, resulting only in distributed gravity readings, which can then be used to calculate angles. To me, this still all seems like black magic, but everything I’ve read about it does suggest it is black magic, and not to worry about it, just use it. Although that’s anathema to my whole project, I have no choice.