Can't optimize a nested query using indexes
Your best simple index is probably going to be on (client_id, task_date, status).  client_id should go first, because it is the only one used with an equality operator.  Including status will only help for index-only scans, so it depends on how well vacuumed task is and your version of PostgreSQL.

The partial index will not lead to incorrect results.  Queries that cannot correctly use the partial index, will not use it.  So if WHERE status != 2 is the most commonly queried case, or the most time-sensitive one, go ahead and make the partial index.