Если исходить из логики что категория активна когда хоть один товар в ней активный, тогда Ваш запрос переформировать без использования count, например так:
UPDATE ps_category SET active = '0' WHERE level = 3 AND id NOT IN (
SELECT DISTINCT(id_category) FROM ps_category_product IN
(SELECT id_product FROM ps_product WHERE active = '1')
)
т.е. изменять статус у категорий которые не входят в список активных. Но тут нужно понимать, как часто Вы планируете проводить такие изменения статусов категорий, если при каждом изменении активности товара, тогда стоит продумать какой-то другой вариант обновления т.к. использовать таких объемных запросов на реальных проектов крайне не оптимально.