OK, so I tried another flight today and things went quite a lot better. On takeoff, the drone lifted straight up (instead of flying off at a crazy angle like last time) and hovered.
But when I selected the stay_p1 block it headed off at high speed roughly in the direction of p1, but massively overshooting. It was flying so fast it couldn't really maintain altitude and fell out the sky some way past p1.
On relaunch, I instead did line_p1_p2, which worked fine, it flew much more sedately to p2, then to p1, where it stayed.
I tried at that point to select go_p2, and it headed off at high speed once more, massively overshot p2, came back again fast, overshot again, and on the third pass fell out of the sky once more.
What should I be adjusting to correct this behaviour?
I'm using master, by the way.