The real issue with this is that ANY user could be in ANY role on ANY record. If John Doe is a Manager on record 001, he can't write to the Approver columns on record 001, but he can read from them. However, if he is an Approver on record 002, he can write only to the Approver columns and can only read from the remaining columns.
This means that Access Teams are not a solution as Column Security Profiles can't be assigned to Access Teams. Likewise, Owner Teams are not a solution as each record will need two Owner Teams and this functionality is not supported.
I'm beginning to think I'll need a custom plugin that will work off of the Service Account and check the user's role assignment (Manager or Approver) in a related User-Record table. That way, the records could stay owned by the Service Account and security on Dataverse would be maintained.
Does this sound like the right direction to go or am I missing an easier solution?