Allow Contributor to edit but not update a published post

There are some workflow plugins available – one being https://wordpress.org/plugins/oasis-workflow/ – but many provide a lot of overhead without quite exactly what you’re looking for. For example, some only work with native Posts and Pages and not CPTs.

If none of the workflow plugins works out, you can look into creating custom statuses and developing your own plugin. Basically, you hook into post status changes, and if the status is publish, you can use jquery to replace the publish changes button with a “submit for review” button. Then you need custom PHP that saves this as a custom status and emails the Approver/Publisher role that changes have been submitted for review. You can send the Approver/Publisher a link to the Compare Revisions screen so they see the old vs. the new side by side and can then make additional changes or publish as-is.

To be quite honest, workflow is the main feature I see lacking in WordPress compared to many other CMSs.