I ran into this specifically when spinning up new instances, I found that as the instance was well into the active state from the horizon perspective, the resource-show on that instance was showing 'scheduling' as the state, which is incorrect. It even persisted that way after a delete on the same instance.
Related bugs:
1. Glance metadata mismatch: https://bugs.launchpad.net/ceilometer/+bug/1201701
2. Too low precision on timestamps: https://bugs.launchpad.net/ceilometer/+bug/1215676
Here's Ceilometer client output for an instance where this was happening
http://paste.openstack.org/show/42963/
The thinking is that we are having the metadata overwritten because we don't check the timestamp to prevent overwriting the current state with an old message's metadata.
If message 2 arrives at CM before message 1 because it ended up on a faster route and AMQP doesn't guarantee order, then message 1 will overwrite the metadata from message 2 and we record an incorrect state.
Does nova emit notifications when the state of the VM changes?