By not making #ProductsNumbered a part of your Common Table Expression, but inserting into it manually from your ProductsFiltered. Then you should be able to reuse it.
;with ProductCatIDs
as
(
----SNIPPED TO KEEP POST SMALL-------
), ProductsFiltered as (
----SNIPPED TO KEEP POST SMALL-------
),
SELECT *,
ROW_NUMBER() OVER (order by ID DESC) as RowNumber
INTO #ProductsNumbered
FROM ProductsFiltered
in this way you should have access to your temp table outside the scope of the common table expressions and can run multiple queries on it.