クラスMyClassにおいて変数flagの値がfalseでなければならない場面でtrueになっていた。
変数flagに値が代入されている箇所を全て確認したが異常なし。
そこでこうした。

bool flag_ = false;
private bool flag {
  get {
    return flag_;
  }
  set {
    if(value) {
      Console::WriteLine("true");  // (A)
    } else {
      Console::WirteLine("false"); // (B)
    }
    flag_ = value;
  }
}

(A)と(B)にブレークポイントを仕掛けた。
それなのにブレークしないまま問題の箇所で変数flag_はtrueになっていた。
原因は何か?
ヒント: C#の言語仕様だけではなく.NET Framework全体を含めた問題です。
答え.

public void Save(string fileName) {
  ...
  BinaryFormatter bf = new BinaryFormatter();
  using(FileStream fs = new FileStream(fileName, FileMode.Create)) {
    bf.Serialize(fs, this);
  }
  ...
}

public static MyClass Load(string fileName) {
  ...
  MyClass result;
  BinaryFormatter bf = new BinaryFormatter();
  using(FileStream fs = new FileStream(fileName, FileMode.Open)) {
    result = (MyClass)bf.Deserialize(fs);
  }
  ...
}

まぁ答えとしては反則臭いですけど。
むやみに使うと死ねる。むしろ死んだ。