É estranho, mas a consulta não lida muito bem com null. Quando alterei a consulta para:
Query query = getSession().createQuery("from Car as c where " +
"c.carModel = ? AND c.carMake is null").setParameter(0, carModel);
funciona bem, pois o DAO precisa consultar o make como NULL. Portanto, se não for nulo, preciso ter dois conjuntos de consulta, um que seja codificado para selecionar nulo como acima, outro para setParam(1, carMake).
Estranho, mas acho que isso funciona.