According to the documentation, "When multiple executions are given that match a particular phase, they are executed in the order specified in the POM, with inherited executions running first." I assume that the order of the inherited executions would be in the order specified in the parent POM, but the docs are unclear here.
However, in practice, it seems the ordering is as documented if there is no inheritance from the parent. But if there are plugins inherited, then the ordering is completely arbitrary, with the inherited plugins not necessarily coming first. I created a project that runs two plugins, both bound to the same phase, with one specified in the parent and one specified in the project. The parent-specified plugin does not run first.