System::String は、C++ が一般に扱う文字列とは異なり NULL 文字を文字列中に含むことができます。
さて、String(array<wchar_t>) と String(char*) の動作差ですが、前者はマネージ配列、後者はアンマネージポインタです。
マネージ配列はそれ自身が長さ情報を持っています。つまり、何文字の String^ にするかは明らかなので、途中に NULL 文字があってもそのまま変換します。
翻ってアンマネージポインタの場合、長さの情報がありません。ですので、NULL 文字が見つかるまで文字列に変換します。