i guess this is not a bug with while, but a bug in how objects persist in the timeframe of a single tick. i think that the 'pick random' condition picks a random object from the set of objects present at the start of the current tick, and ignores any changes (objects being destroyed) made to this set during the current tick.
i've had similar problem with objects that are not present in the first tick ('destroyed on startup') and created en masse in a loop during the 'on startup' event. because construct couldn't operate on these objects in the same tick, i worked around that by 'call function after delay'. i though it was a startup thing, but your 'while'-problem is oddly similar.
does this ring any bell with the devs regarding object handling?