思いつくままに。
同値判定はどのように判断するにせよ、全体にわたって一貫していれば問題は無いと思います。
「別 ID なのに登録できないケース」はそこまで問題でしょうか。「他の人に使われているんだなあ」となるだけだと思います。
例えば「日本語で使う文字」だけに絞るといった仕様は、困難です。日本語で使う文字は他の文字と混ざって分布しており、簡単に定義できるものではありません。手間を掛けてまで行う価値があるかは疑問です。
既存の例えばJISコードに含まれる文字という定義にするのはひとつの手ですが、どうしてもアレは使えるのにコレは使えないという一貫性を欠く状況は出ますし、OSごとのUnicode変換テーブルの問題もあります。
また、Unicode変換テーブルの違いに由来する、環境ごとに入力が困難な文字があります。例えばWindowsで全角チルダ、Macで波ダッシュはキーボードから容易に入力できますが、逆は困難です。複数の環境からログインすることを考えると、これらの文字は同一視するのが親切かもしれません。
文字数の定義は困難です。Grapheme Clusterが比較的見た目の文字数に近いですが、Unicodeのバージョンに依存するのでバージョンが変われば一貫性を損ないえます。
参考: C# 文字列のカウント(サロゲートペアで構成されている文字列)
長さの制限はより一貫性のあるUnicodeコードポイント数やバイト数で行ったほうがよいでしょう。全体で一貫していなければログイン不能な場合が生じます。
Unicodeには目視で区別できない文字列が無数にあるため、IDを目視で区別する運用では他IDへのなりすましを防げません。
目視で区別できない文字列をIDに使えないようにすることは、完璧に行うのはまず不可能と思いますが、それを意図したと思われる実装例で、Wikipedia系のユーザー名は書記体系の異なる文字を同時に使用できないようになっています。
例えば「Example」(すべて英字)に対する「Εxаmple」(ギリシャ・キリル文字入り)のようなものを弾くことができます。
文字の表示される横幅は予想外に広くなりえます。広い領域を確保しておくか、切り詰められる前提でUIを設計した方がよいでしょう。ただ、日本で使う文字に限れば正方形を超える横長の文字はほぼ存在しないと見てよいかもしれません。
縦幅も、文字によって行の上下に大きくはみ出します。
Unicodeコードポイント0x10000以降(UTF-16でサロゲートペア、UTF-8で4バイト)の文字は正常に扱えないプログラムがあります。最近は減ってきていますがまだ気をつけた方がよいでしょう。
Unicodeには非文字やサロゲートのように文字に割当てられないコードポイントがあったり、UTF-8にはUnicode範囲外や冗長なコードのように順当にコードポイントに割当てられないビットパターンがあったりします。これらは使用できるべきではありません。
IDを表示する際、RTL(Right-to-Left)文字が含まれていると、適切に処理しなければ、前後の文字を巻き込んで表示が乱れ読みづらくなります。
例: IDの後に日付が表示されるUIがあったとして、素直に書くと
Username : 12月31日
اللغة العربية : 12月31日
のようになります。
また、RTL/LTR属性を制御する制御文字があります。これらは禁止するのも手です。