Change the second role depending on the first

Because you are operating on the current (logged in) user – you need to accept parameters in your callback so that you can operate on the user whose role is being set:

rb_update_user_role( $user_id, $role ) {
    // error_log( "Setting user $user_id to role $role" );

    if ( $role !== 's2member_level0' && $role !== 's2member_level1' )
        return;

    $user = new WP_User( $user_id );

    if ( $role === 's2member_level0' ) {
        $user->remove_role( 'vendor' );
        $user->add_role( 'customer' );
    } else {
        $user->remove_role( 'customer' );
        $user->add_role( 'vendor' );
    }
}

add_action( 'set_user_role', 'rb_update_user_role', 10, 2 );

Note you do not need to remove any roles – WP_User::set_role explicitly removes all other roles before it fires the action.