Решил проблему на основе 5-го пункта моих наблюдений:
убрал transition у попапа и добавил его в класс active. В нем также есть свойства opacity 1 и visibility visible.
При открытии попапа в первый раз выдается этот класс и больше он не удаляется.
Для скрытия попапа пришлось добавить еще один класс hidden, в котором прописаны opacity 0 и visibility hidden.
Класс hidden будет тоглится в дальнейшем при открытии/закрытии.