Sounds like we are in the same boat! The biggest thing that we have found is making sure everyone is accountable throughout the beginning of the finishing stage. We make sure not to leave anything to chance. If we spot something that might need to be reworked, we do it before the client has a chance to see it and call us out.
In the past we used to let things pile up and say we'll deal with that at the end or it's such a small thing. We'll see if it even comes up and if it does we'll fix it on punch list. But then sometimes you end up with an absolute pile of work.
When we do projects with designers, we also like to leave what we call a sacrifice. We leave a small error in a very obvious space that they can point to and we can agree with them that it is not up to **bleep** and fix it easily. The first time we did it it felt kind of dirty but we realized that it made the rest of the punch list go very smooth. It was something I picked up. After doing a few structural inspections. We realized that if everything is perfect they will make you do something silly. But if you leave one 2x4 out they will just tell you to put the 2x4 where it belongs. So we started creating a sacrifice on each job lol