UPDATE messages
SET s_deleted = IF(sender = :sender, 1, s_deleted),
r_deleted = IF(recipient = :recipient, 1, r_deleted)
WHERE id = :id
Como você pode ver, o "truque" é simplesmente definir uma coluna para seu valor existente quando os critérios não forem atendidos, para que ela seja atualizada apenas quando necessário.