IE の cloneNode は似て非なるもの

IE における cloneNode の困った挙動について調べてました。
cloneNodeの仕様

IEでオレオレ属性を追加しcloneNodeすると、参照が作成されてしまいます。

<div id="AAA">NodeA</div>

var AAA = document.getElementById("AAA");

AAA.oreoreAttr = { key: 1 };

var BBB = AAA.cloneNode(); // BBB を作成

AAA.oreoreAttr.key = 2; // AAA に 2 を設定すると…

alert(BBB.oreoreAttr.key); // BBB も 2 になってしまう

このような挙動が問題になるのは、以下のように、不可視な属性を設定していた場合に、cloneNodeで参照が作成されてしまい、あっちを変えるとこっちも変わってしまうケースです。

AAA["data-oreore"] = { key: "value" };
var BBB = AAA.cloneNode();

BBB["data-oreore"].key = "new value";  // AAA["data-oreore"]側も変化してしまい、こまったことになる
その前に

IE以外のブラウザでは、AAA.oreoreAttr のように setAttribute で設定されていないオレオレ属性は cloneNode でコピーされません。

<div id="AAA">NodeA</div>

var AAA = document.getElementById("AAA");

AAA.setAttribute("key", 1); // AAA.key は setAttribute で設定されたので cloneNode のコピー対象

var BBB = AAA.cloneNode(); // BBB を作成
alert(BBB.getAttribute("key")); // 1  (属性のコピーが作成されている)

AAA.setAttribute.key = 2; // AAA に 2 を設定しても…

alert(BBB.getAttribute("key")); // BBB は 1 
さらに問題なのは

IE の cloneNode は、オレオレ属性のコピー + 参照を作成するだけでなく、イベントもクローンしてしまいます。
IE9pp2 でも IE8 と同様です。