DOMSubtreeModified устарело в пользу MutationObserver.
Если не хотите переходить на MutationObserver пробуйте экспериментально узнать от чего зависит количество вызовов.
Для экспериментов можно предлагаю попробовать разные действия с отслеживаемым элементом:
$("body").on('DOMSubtreeModified', "#id", function(e) {
console.log(e);
});
Допустим элемент #id изначально пустой.
Пробую такую последовательность
$('#id').html(""); — вызывает функцию 1 раз
$('#id').html("hello"); — вызывает функцию 1 раз
$('#id').html("тест"); — вызывает функцию 2 раза
$('#id').html("next"); — вызывает 2 раза.
$('#id').html(""); — вызывает функцию 1 раз
Конкретно для этого примера понимаем, что запись в пустой элемент вызывает функцию 1 раз.
Перезапись непустого элемента - 2 раза, видимо:
1 вызов - Очистка элемента
2 вызов - Заполнение элемента.
И все же рекомендуется переходить на MutationObserver.