I'm not entirely sure what event actually results in the callback, but the store's sync method appears to fire the callback before the sync is complete. In our example, a batch operation of multiple creates fires the callback before all records have been created and returned from the database. So:

Code:
  myStore.sync({
    callback: function() { 
      MyApp.App.fireEvent('mystore.completed');
    }
  });
Causes the event "mystore.completed" to be fired BEFORE the set of records are done. I was able to get around this by adding this to the proxy of the model used:

Code:
proxy: {
  onBatchComplete: function() {
    MyApp.App.fireEvent('mystore.completed');
  }
}
Then, I just call mystore.sync();

To me, this is a problem with the functionality of sync()'s callback.