あーそういうことか。
y||=(x=i) は動くなら意図(x=i; y||=x)通りだけど、 x=(y||=i) だと代入はされても意図しない動作(y||=i; x=y)
っていうかバグだ。
ごめんなさい。

前者についてはどうでしょうか。
parse.yでvar_lhs tOP_ASGN argとなっているので、argを全部持っていって評価しているならば
確かに俺の思ったように動かないと思うのですが……その先は読めないorz