What I've done with Press Permit is define and enforce a status-setting capability for each custom moderation status:
$page_type->cap->set_posts_pitch = "set_pages_pitch";
$page_type->cap->set_posts_approved = "set_pages_approved";
... and of course corresponding edit and delete caps:
$page_type->cap->edit_pitch_posts = "edit_pitch_pages";
$page_type->cap->edit_approved_posts = "edit_approved_pages";
At this point, I don't automatically add those caps to the Editor role, but make it easy to do so.
I considered building an alternate has_cap engine that would support
$page_type_obj->caps['approved']->edit = "edit_approved_pages";
$page_type_obj->caps['approved']->set = "set_pages_approved";
...but decided not to take that on without some feedback / support from the WP dev community.