Postgres Rules Preventing CTE Queries

TL;DR: use triggers, not rules.

Generally speaking, prefer triggers over rules, unless rules are absolutely necessary. (Which, in practice, they never are.)

Using rules introduces heaps of problems which will needlessly complicate your life down the road. You've run into one here. Another (major) one is, for instance, that the number of affected rows will correspond to that of the very last query -- if you're relying on FOUND somewhere and your query is incorrectly reporting that no rows were affected by a query, you'll be in for painful bugs.

Moreover, there's occasional talk of deprecating Postgres rules outright:

http://postgresql.nabble.com/Deprecating-RULES-td5727689.html