Разве это не должно быть что-то вроде
Predicate innerAnd = cb.conjunction();
innerAnd.getExpressions().add(C1);
innerAnd.getExpressions().add(C2);
Predicate or = cb.disjunction();
or.getExpressions().add(innerAnd);
or.getExpressions().add(C3);
Predicate outerAnd = cb.conjunction();
outerAnd.getExpressions().add(or);
outerAnd.getExpressions().add(C4);
Ваш код скорее ведет к чему-то вроде
C1 and C2 and C3
, а я не вижу C4
в вашем примере.