Sorry not to have replied earlier, I forgot to check if there had been a response to my previous post.
Regardless of calling either FPanels.Free or FreeAndNil(FPanels), FPanels doesn't point to a valid address. So, according to your description, in both cases the AV should occur.
In the first case (where FPanels is not set to nil), there is not necessarily an AV since the blocks for FPanels and FItems (the list it uses to actually store items) may both be still in the heap free area (probably in one of the small block lists), with most of their contents still intact -- in particular, the 0 in FItems.FCount which means the loop won't be executed. Using FreeAndNil guarantees an AV if there is an attempt to use FPanels after it is freed.
In addition, while the ComponentState is csDestroying, delphi doesn't pass notifications to the component.
The above is not true in D5. I traced the component destruction in the debugger. When TStatusBarPro calls inherited Destroy, control eventually reaches TComponent.Destroy. This eventually calls FOwner.RemoveComponent(Self). TComponent.RemoveComponent issues a Notification for the opRemove which is sent to all children, including the statusbarpro (it is not completely removed until the call to TComponent.Remove).
In D5 anyway, none of the above mechanism is affected by csDestroying.
Sorry again for not replying sooner and thanks for looking into this.