In 4.7 the activity 'Assign Case Role' is assigned to the client: is this a bug?
It's a bug. On line 1804 of CRM/Case/BAO/Case.php there is the following test ...

   if (isset($dao-&gt;caseId) || $dao-&gt;rel_contact_id != $contactId) {


Observing how the function is called, the Case Id will always be set, so the condition is always true and the else part is never executed.

Changing the condition to ...

   if ($dao-&gt;rel_contact_id != $contactId) {


fixes the behaviour.