Первый способ написан действительно странно. Это выглядит странно, потому что это идет назад. Это сделано для того, чтобы не расстраивать коллекцию выбранных предметов. Выбранная коллекция элементов не полностью создана, это Enumerable, и элементы снимаются с нее только тогда, когда вы их запрашиваете. Вы не можете использовать foreach, потому что коллекция выбранных элементов постоянно меняется при удалении элементов.
Я на самом деле предпочитаю второй способ. Кроме того, все, что читается легче, легче поддерживать. Первый гласит: получить выбранные элементы, пройти их назад, удаляя каждый из списка.
Второй гласит: пока есть выбранные элементы, удалите первый доступный выбранный элемент.
Гораздо лучше второй путь.