I can think of only rare occasions where any status other than 200 is cached. Usually this is an edge case that has to be configured in the caching tier.
Not caching your error pages is a good way to bring down your servers once something goes wrong. We usually have a short cache for errors to make sure there is an upper limit to the amount of requests coming through the cache.
Redirects are often cached as well, but caching error pages for a short while is usually done to mitigate DoS attempts; if the cache can be repeatedly bypassed for certain resources, those resources may serve as targets.