В стандартном разделе 12.6.4 ECMAScript 5.1 (о циклах for-in) говорится:
Свойства перечисляемого объекта могут быть удалены во время перечисления. Если свойство, которое еще не было посещено во время перечисления, удалено, то оно не будет посещено. Если новые свойства добавляются к перечисляемому объекту во время перечисления, не гарантируется, что вновь добавленные свойства будут посещены в активном перечислении. Имя свойства нельзя посещать более одного раза в любом перечислении.
Поэтому я думаю, что ясно, что код OP законен и будет работать, как ожидалось. Причуды браузера влияют на порядок итераций и операторы удаления в целом, но не на то, будет ли работать код OP. Обычно лучше всего удалять только текущее свойство в итерации - удаление других свойств в объекте непредсказуемо приведет к их включению (если они уже были посещены) или не включению в итерацию, хотя это может или не может быть проблемой в зависимости от ситуация.
Смотрите также:
Однако ничто из этого не влияет на код OP.