Which hook is invoked when a user's roles are changed? I am trying to set a custom role expiration date in a subscription website using Ubercart and Paypal. Role expiration date is set by the role expiry module when a user completes payment. 

I am trying to achieve this by using hook_user(). Is there any other way to achieve this?
There isn't any other hook to use, as it is evident from the code used from user_multiple_role_edit(). 

  // The role name is not necessary as user_save() will reload the user
  // object, but some modules' hook_user() may look at this first.
  $role_name = db_result(db_query('SELECT name FROM {role} WHERE rid = %d', $rid));

  switch ($operation) {
    case 'add_role':
      foreach ($accounts as $uid) {
        $account = user_load(array('uid' =&gt; (int) $uid));
        // Skip adding the role to the user if they already have it.
        if ($account !== FALSE &amp;&amp; !isset($account-&gt;roles[$rid])) {
          $roles = $account-&gt;roles + array($rid =&gt; $role_name);
          user_save($account, array('roles' =&gt; $roles));
        }
      }
      break;
    case 'remove_role':
      foreach ($accounts as $uid) {
        $account = user_load(array('uid' =&gt; (int) $uid));
        // Skip removing the role from the user if they already don't have it.
        if ($account !== FALSE &amp;&amp; isset($account-&gt;roles[$rid])) {
          $roles = array_diff($account-&gt;roles, array($rid =&gt; $role_name));
          user_save($account, array('roles' =&gt; $roles));
        }
      }
      break;
  }


The only invoked hooks are the ones used by user_save().