From my limited experience, the flight has to be full, and then some logic is applied to determine who gets the upgrade. I suspect the logic has also changed over time, and what applied a few years ago may not apply now.
I am guessing the algorithm has two passes: 1. select who'd get...