UCS2 und NVARCHAR sind im Prinzip identischen.
Allerdings muss man ILERPG in den CTLOPT beibringen dass UCS2 entweder 13488 (alte UCS2) oder 1200 (neue UCS2, eigentlich UTF-16, also variabel UCS2 oder UCS4).
In SQL ist N[var]char als CCSID 1200 definiert.

VARLEN.
In DDS und ILERPG kann man die Längeninformation 2/4 festlegen.
z.B. varchar(1000:2) oder varchar(1000:4);
Nur bei SQL ist das halt automatisch.
Bis 32K eben 2, > 32K dann 4.

Wenn dann also 4 Bytes übergeben werden und nur 2 Bytes reinkommen, ist die Länge eben 0.
Umgedreht, wenn 4 Bytes erwartet werden und 2 Bytes ankommen ist die Länge > 64K, was zu Speicherproblemen führt.

Das ist eben das ganze Problem mit SQL und ILERPG, dass da nichts typesafe ist.
Wenn du mit Varying-Feldern arbeiten willst, musst du die Definitionen auf jeden Fall identisch halten.
Alles andere bringt, wie D*B gerne sagt, nur Murks und Wackelhaufen.

Wenn du aber mit JSON und Prozeduren/Funktionen umgehen willst, solltest du die auf DBCLOB in allen Belangen festlegen.
DBCLOB kann man im RPGLE allerdings auch Redefinieren (Pointer) mit varucs(nnnn:4) um native eben mit dem DBCLOB umgehen zu können.