Não posso levar crédito por esta resposta, pois você já a resolveu, mas explicarei por que funciona.
PostgreSQL fornece a resposta quando diz
O código Java está criando um valor literal de string que representa o tipo de gênero de enumeração Java.
A conversão de um literal para um tipo de gênero do PostgreSQL é feita adicionando um sufixo de conversão ao valor
::gender
. Então a entrada válida seria
'F'::gender
ou
'M'::gender
Isso funciona porque todos os tipos do PostgreSQL têm um método de entrada que recebe uma representação de texto e a converte para o formato interno.