Se você quiser que vários critérios sejam avaliados em sua declaração de caso, tudo o que você precisa fazer é mudá-los para antes de THEN e retornar um valor que indique que ele foi aprovado na verificação.
Para o seu código, isso pode ser feito assim:
select a,b,c,d from xyz where 1 =
case p='Closed' and (q-r)=0 then 1
case p='Pending' and (q - isnull(r,0) )>0 then 1
case P='All' then 1
Embora sua sintaxe não funcione com o SQL Server (não sei qual banco de dados você está consultando). Uma versão de trabalho no SQL Server seria:
select a,b,c,d from xyz where 1 =
CASE
WHEN p='Closed' AND (q-r)=0 THEN 1
WHEN p='Pending' AND (q - isnull(r,0) )>0 THEN 1
WHEN P='All' THEN 1
ELSE 0
END