The reason why you are getting segfault on MainMenuState.Destroy is becouse you are calling inherited on the start of the destructor method.
In constructor (SomeObject.Create) you always call inherited on start of the method to make sure that constructor code from parent class is executed first.
But in destructor (SomeObject.Destroy) you should always call inherited last othervise destructor code from parent class is executed too fast and can lead to memory leaks due to only freeing part of your objects memory (only memory of parent class is being freed up).

As for nothing except initialization showing shouldn't you be calling the stuff from your Main Loop within the OnTimer events of your timers that you prepared in initialization part of your game?