рони, да, можно все в один обработчик затолкать, но у меня их 2 для большей наглядности, один отвечает за открытие, второй за закрытие попапа.
С вашим кодом любой клик по контенту попапа приведет к его закрытию, т.к. `.popup_bg` - родительский контейнер для всего его содержимого, у меня не просто так вместо метода `closest` использовался `matches`.
window.addEventListener("click", e => {
  if (e.target.closest(".close-popup") || e.target.matches(".popup__bg")) {
    e.target.closest("[data-popup]").classList.remove("active");
  }
  const openPopupNode = e.target.closest("[data-popup-id]");
  if (openPopupNode) {
    const popupId = openPopupNode.dataset.popupId;
    
    document.querySelector(`[data-popup="${popupId}"]`)?.classList.add("active");
  }
});