Eu tinha certeza de que a wp_update_user
função deveria fazer isso ( http://codex.wordpress.org/Function_Reference/wp_update_user ).
Ele ainda obtém user_login como parâmetro, mas parece que o ignora quando você define esse parâmetro.
Portanto, este código parece bom, mas não funciona como você deseja :(:
wp_update_user( array ( 'ID' => $user_id, 'user_login' => $new_login ) ) ;
Você precisa chamar a consulta SQL personalizada para atualizar o user_login:
$wpdb->update($wpdb->users, array('user_login' => $new_user_login), array('ID' => $user_id));
Funciona bem e não acho que tenha sérias conseqüências, porque o WP usa o ID do usuário para atribuir postagens / comentários (e assim por diante) ao usuário.
O único problema que consigo pensar é que, quando esse usuário está conectado no momento, ele será desconectado após a alteração do user_login.