I can't say the config is wrong or not, but our devs require the pool_mode to be "transaction" for their respective db.
At this point I feel we shouldn't fix this: postgres shouldn't care how the connection is reused. If anything pgbouncer should make sure the connection is reset for reuse. And they kind of do: use a separate pool.
ISTM the problem described here is a failure on PgBouncer's part: it is failing to maintain the illusion of a separate connection per user. I don't know that much about PgBouncer, but perhaps you just have it configured wrong?