現状のHSP(HSP3.1, HSP3.2)では未定義動作です。
まず、ここではモジュール変数の実体のことをstructオブジェクトと呼ぶことにします。
最初mv1, mv2, mv3にnewmodによって格納されたstructオブジェクトをs1, s2, s3とします。
モジュール型の変数ではnewmodで直接生成された要素と、他の変数から代入された要素は区別されます。これはvaruseで確認できます。
モジュール型の変数に代入が行われると、その要素にnewmodで直接生成されたオブジェクトが存在する場合、それは開放されてしまいます。(たとえそのオブジェクトが他の変数から参照されていたとしても)
「mv3=mv1」が実行されるとmv3にはs1が格納され、s3は開放されます。
「mv1=mv2」が実行されるとmv1にはs2が格納され、s1は開放されます。
「mv2=mv3」が実行されるとmv2にはmv3に格納されているs1が格納されますが、s1は既に開放されています。
既に開放されているstructオブジェクトを扱おうとすると未定義動作となります。(Cで言うとfreeした領域にアクセスするのと同じです)
こちらの環境では以下のスクリプトでシステムエラーが再現しました。
#module md1 a,b
#modinit int ina, str inb
a=ina
b=inb
return
#modfunc show
mes " a="+a
mes " b="+b
return
#global
#module
#deffunc step_alloc local s
sdim s, 48 * 2
return
#global
newmod mv1,md1,10,"apple"
newmod mv2,md1,20,"grape"
mes "mv1": show mv1
mes "\nmv2": show mv2
newmod mv3,md1,0,""
mv3=mv1
mv1=mv2
step_alloc
mv2=mv3
mes "\nmv1"
show mv1
mes "\nmv2"
show mv2