基本的な考え方はこうです。関数の条件を追加して、役割が変更されたときにすべてのユーザーがモデレーターグループに追加されないようにする必要があると思います。
function add_user_to_discourse_group_on_role_change( $user_id, $role ) {
$sso_params = array(
'external_id' => $user_id,
'moderator' => 'true', // ブーリアン値の 'true' と 'false' は文字列として設定する必要があります!
'add_groups' => 'volunteers' // カンマ区切りのリスト。カンマの後にスペースは不要です。
);
DiscourseUtilities::sync_sso_record( $sso_params );
}