How long should redirects stay in place after a CMS migration?

A minimum of 12 months. Google has stated it processes 301s relatively quickly, but external sites and email signatures take longer to update. Twelve months covers the long tail. For high-value URLs with sustained backlink growth, keep them permanently.