Если коротко, то dragleave всплывает от каждого дочернего элемента у дроп зоны, поэтому, в идеале, у зоны не должно быть дочерних элементов. Т.е. надо поверх картинок создать, например, полупрозрачный div, который и будет дроп зоной.
Но, как быстрый вариант, можно добавить:
pointer-events: none;
для класса preview-image
это как раз отменит эффекты указателя для всех дочерних элементов текущей дроп зоны, чтобы на них не срабатывал dragleave