Проблема в том, что сначала будет наложено условие "c3_.id IN (17, 15)", а уже затем на результат "COUNT(DISTINCT c3_.id) = 1". К этому времени в таблице для каждого id будет определенный цвет 15 или 17.
Можно во временной таблице заранее получить продукты, у которых только один цвет, и работать с ними.