Ho risolto, anche se tuttora mi è ignaro il motivo di tale comportamento. Condivido perchè ci ho perso tempo e mi spiace se capita ad altri.
In pratica il problema era che in shop.bowse.php (e conseguentemente nell'include shop_browse_queries.php) la variabile $category_id viene vista come vuota. Ripeto: non capisco perchè. Questo però fa in modo che venga bypassata una clausola WHERE nell'istuzione SQL, che è la responsabile proprio del filtro.
E' bastato aggiungere in shop.browse alla riga 90 (ma in realtà è importante metterla in un punto qualsiasi prima della chiamata all'include):
$category_id = mosgetparam($_REQUEST, 'category_id', null);
Il valore viene assegnato alla variabile, il filtro viene applicato e ora funziona.
Aki76