A. In the recent past I had several close calls due to unstable Loiter behaviour where the Loiter Mode starts to generate oscillation commands, i.e. it starts rocking the copter and if the attitude tune is not very good, it is getting out of control, i.e. the Loiter inputs are out of phase with attitude, and the real oscillations become stronger and stronger. From the posts here it is not only me, but a lot of other people as well. And I am pretty sure there were many crashes due to this.
I stronlgy suggest to implement following algorythm: detect Loiter Mode oscillations (Roll and Pitch DESIRED), usually they are above 1 Hz. Reduce automatically the positioning P and I factors. Issue a warning to GCS. If the oscillations of DESIRED Pitch and Roll go beyond a certain level despite the automatic reduction of positioning P and I revert the Mode from Loiter to Alt Hold.
This behaviour could be conditioned to some “safety” mode. if the safety mode flag/bit is on, then the Loiter Mode oscillation dampening would be carried out.
B. switching to Loiter Mode, Rejected if no GPS, or some other issue. I use Loiter Mode as a panic button for Acro Mode. I.e. if I loose Video, or something like this, I have a switch which turns the Loiter Mode on. However, I had several times the situation where there was no GPS, or something like that the copter did not like the GPS data, and it bluntly refused to change to Loiter Mode, twice it almost resulted in a crash of 5 inch racer (because I believed it switched). I think that if the system can not switch to Loiter Mode for some reason, it should switch to Alt Hold mode instead automatically.