Due the commit firedrakeproject/firedrake@af2c9cc (Firedrake), the default Riesz representation changed from l2 to L2. This breaks the IPOPTSolver in Firedrake, since IPOPT is not prepared for anything other than l2.
One possible solution to this would be to specify the Riesz representation directly in the IPOPTSolver, as:
dJ = partial(self.rfn.derivative, forget=False, options={"riesz_representation": 'l2'})