Te debo confesar que nunca lo había notado, revisé mis proyectos y no tienen ningún booleano :D.
Bueno, primero, debo decirte a manera de información (y a todo el grupo) que existen dos maneras diferentes de realizar la persistencia de una aplicación, la primera es la que ustedes ya conocen (generar las clases, agregar anotaciones y crear la base de datos a partir de estas clases), la segunda, mucho más sencilla, pero con menos control (esto se ve reflejado en proyectos más grandes con muchas relaciones entre tablas, donde la aplicación resulta haciendo cosas que no se deseaban) es crear la base de datos y a partir de ella crear las clases entidad (pueden revisar esto en el apartado nuevo->otro->persistencia->clases entidad a partir de base de datos, donde solo deberán definir la conexión a la base de datos y algunos parámetros, así fué como se trabajó el semestre pasado, pero esto fue debido a la manera en que venían adelantando la aplicación y la falta de tiempo).
Esto lo digo porque al ver tu problema intenté experimentar de esta manera, creando una base de datos de prueba, agregando una tabla con un campo booleano y generando las clases entidad a partir de ella. Noté entonces dos cosas:
1. En la base de datos el campo booleano queda definido como "tinyint"
2. En la clase entidad se agregó la anotación @Basic(optional = false)
Como ya habías mencionado tú que le habías agregado dicha anotación, entonces supuse que no sería esta la razón, ejecuté entonces una prueba agregando un valor verdadero y uno falso y funcionó bien.
Entonces hice el procedimiento inverso, ya que tenía la entidad con anotaciones, hice un drop and create en la unidad de persistencia, entonces noté:
1. En la base de datos el campo booleano quedó definido como char
Al ejecutar las pruebas sucedió lo que tú ya mencionaste: sin importar el valor ingresado agregaba un "b".
Entonces tuve que hacer lo que cualquier persona haría: preguntarle a google. Lo primero que encontré fué que se debía agregar la anotación Basic, pero ya lo habíamos hecho y no funcionaba, también encontré que esto dependería de la librería de persistencia que se utilizara (en mi caso estoy usando hibernate), entonces agregué este término a la búsqueda, encontrando en este link:
http://stackoverflow.com/questions/1154833/configure-hibernate-using-jpa-to-store-y-n-for-type-boolean-instead-of-0-1
que se debía agregar la anotación @Type(type="yes_no") (o según parece también con true_false, aunque no lo probé), lo hice y entonces revisé, al agregar los valores a la base de datos los agrega como "y" o "n", lo que me pareció curioso, entonces hice pruebas de escritura->lectura y funcionó correctamente.