I think I've figured out what's going on:
When I called to cancel, it wouldn't let the agent run the automated cancel-down process. It asked her for the card number to be repeated, but wouldn't accept it, despite multiple attempts.
That jogged my memory that my wife's BA Amex had expired 8 days ago. A new card was sent with the same card number, but new expiry.
I have just booked another flight and started a 'test cancellation'.
Hurrah - instant cancellation is offered on that new booking. Despite being a HHA.
I'll do another test cancelation after 24 hours, to check the instant route is still possible after the 24 hour window.
The old card is still showing in the account, as expired. I tried changing the expiry date in the hope instant cancellation would be possible with previous bookings. Alas, no luck.
This is perhaps the reason others have experienced what appears to be indiscriminate back-office cancellation only on 'simple' bookings.
With that in mind, it's worth only using a card with >1 year left.
Perhaps, deleting cards also has a similar effect.