D3DCOLORVALUEに範囲外の値を指定すると

// Direct2D(1より大きい値は1として扱う)
red = (1.0f <= red) ? red : 1.0f;
// Direct3D9(ちょうど0...1と255...1が対応する感じ)
red = (1.0f <= red) ? red : (256.0f - red) / 255.0f;

Direct3D9でやらかしたとき指定したのが128だったんですが、明暗逆になってもちょうど同じなので気づかなかったようです。そういうことにします。
そのままDirect2Dやろうとしたら真っ白になってしまい、同じ構造体なのにDirect2Dだけ値域違うんですかばかやろーとダイアリー書きかけて、今に至る。
これデバッグランタイムでも範囲チェックしないのね。
ところでMSDNにはこんな記述があります。

You can set the members of this structure to values outside the range of 0 through 1 to implement some unusual effects. Values greater than 1 produce strong lights that tend to wash out a scene. Negative values produce dark lights that actually remove light from a scene.

http://msdn.microsoft.com/en-us/library/bb172520(VS.85).aspx

その割に大きくなるほど暗くなる実装ってどうなの。