UPDATE messages
SET s_deleted = IF(sender = :sender, 1, s_deleted),
r_deleted = IF(recipient = :recipient, 1, r_deleted)
WHERE id = :id
Como puede ver, el "truco" consiste simplemente en establecer una columna en su valor existente cuando no se cumplen los criterios, de modo que solo se actualice cuando sea necesario.