Удалив сам оьъект из листа — вы убрали едиственную на него сслыку (кроме weak) и ктому же предполагаем

что лист при методе remove во внутреннем массиве выставил соответстующему элементу null (читай cli исходники листа или мсдн

. Так вот, чтобы .Alive == false нучно чтобы сборщик мыслора сработал и собрал мусор. Вызываем GC.Collect и сботщик увидев, что на этот объект нет ни одной ссылки — убивает его (weak он "не считает").