Вы слушаете событие на карте, но относительно карты балун не закрывается, а только перемещается. Вы можете слушать события на геообъектах (или на коллекции, например map.geoObjects), тогда вы будете получать его с того геообъекта, на котором балун открывается или закрывается.
Событие на карте произойдет при физическом закрытии балуна.
(Метки динамически загружаются и кластеризуются). Вариант со статическим кластером не предлагать: слишком долго очищать и записывать каждую метку по очереди.
Это справедливо и для объектов в составе кластера - можно слушать событие на map.geoObjects, события от балунов одиночных меток будут так же прокидываться.