84~87行目のと同じ範囲外に出ない様な処理を、92行目のIF文用のも用意してないので、一旦範囲外に出ちゃったら戻って来れなくなってるんですね。
88行目の前にDX=0:DY=0っていう処理を追加して、92行目を
IF X<110 AND Y>145 THEN
IF DX<0 THEN X=110:DX=0
IF DY>0 THEN Y=145:DY=0
ENDIF
とすればうまくいくんじゃないです?
もう少し付け加えておくと、@LOOPのラベルがある行のすぐ後にDX=0:DY=0の処理を移動させておくと、BUTTON()関数からの返り値でXとYに加算する数値を判別するIF文が実行されなければキャラクタが移動しないというふうになりますよ。
あと79~82行のSPANIMを止める処理の後の変数RUNに代入する処理は、違う値を代入するのでなければ不必要かと。
だにえるさんも指摘されてますけど、IF文の条件式が同じ処理なら書く順番をうまく考えてやれば一つにまとめたりできるので、
この場合なら多分74~77行目で IF B AND 1 THEN ~ みたく書いてるかと思うんですけど、例えばX=X+0のところをDX=1に置き換えて、88~92行目で同じ条件式を使ってるIF文を消しても、途中で変数Bに新しく代入したりしてないので同じ結果が得られると思いますよ、