IDisposableを実装するのは、破棄すべきアンマネージリソースがあるからであって、
その状態をきちんとマークしておけば、わざわざフラグなんか持つには及ばないと思うんだ。

たとえば、内部的に何かのWin32ハンドルを使っているとすれば、↓こんな感じで。

if (_hProc != IntPtr.Zero)
{
  bool success = CloseHandle(_hProc);
  if (success)
  {
    _hProc = IntPtr.Zero;
  }
  else
  {
    throw new Win32Exception();
  }
}