I'm creating a layer in mapserver using postgis. The layer consists of many polygons. Sometimes some of those polygons will change. Is it possible to cache the layer tiles using something like tilecache and only regenerate tiles containing the changed polygons? Or do I need to regenerate the whole layer?
It depends on tiling software.
For example, in MapProxy (what is excellent choice for tiling), you can define 'coverages' in your configuration: http://mapproxy.org/docs/1.5.0/seed.html#id7, and regenerate only those areas. So, whenever your polygons change, define new coverage and re-seed your cache.