The order in which events are dispatched cannot be easily guaranteed. They're dependent on the order in which modules are loaded. Typically all core event observers will be called prior to community and local code pool observers.
There is a method to force magento observers to fire after a custom one by "faking" a dependency of a core module to a local or community one. Have a look to Lee's answer here: Make a custom observer fire before an existing Magento observer.
/app/etc/modules/Groupname_Page.xml
<config>
<modules>
<Groupname_Page>
<active>true</active>
<codePool>local</codePool>
<depends>
<!-- Your dependencies go here -->
</depends>
</Groupname_Page>
<Enterprise_PageCache>
<depends>
<Groupname_Page />
</depends>
</Enterprise_PageCache>
</modules>
</config>
I personally don't like that approach as I don't know what consequences forcing that dependency would have.
For your use case, it sounds that you should do some sort of detecting for data/state to know whether it was fired or not. Checking a data/state on a model would be preferable than trying to force an event order.