Esta API é muito complicada, muito mais fácil fazer a mesma consulta no próprio SQL...
Uma sugestão seria usando um between nvl ou like %:
Exemplo:
Select p
from Produtos p
where p.nome like '%'||:nome||'%'
and p.data between nvl(:data, '01/01/2000') and nvl(:data, '31/12/2100')
PS: Nao testei para ver se o NVL funciona no JPQL