I've implemented the overflow checks and made some benchmarks and the ipow() version became slower except with some specific inputs (base 0 for example). It's true that the new auxiliary functions could be optimized, but I don't think it makes sense to keep working on them just to match pow() speed.
I'm attaching both patches in case someone wants to have a look but I would go with the simpler solution (pgbench_pow_v10.patch).