It really depends on the needs of the project, and what your plan for maintaining the CSS down the road are. I work on a large project where I don't always have the luxury of changing the HTML in the template, so I require a very fine-grained control of the CSS.
I use a single global stylesheet, and a template-level stylesheet that defines the basic layout area - columns, re-usable sections, etc. Finally, I'll apply a page-specific sheet that only applies to the the sections that are particular to that page.
The major benefit of this is that since everything cascades downwards, I can define the large majority of my styles in the global and template-level sheets, but still be able to override individual rules at the page-level. Essentially, I can sub-class my CSS, only altering the parts I need to change. This way, I also don't have to deal with tons and tons of unique names. Two pages might both have a #left-column
area, but implement it differently. Think of it as CSS polymorphism.
The downside to this method it that it does force me to maintain a fair number of stylesheets. But with proper documentation and naming conventions, it has worked very well.
Typically, I find if all CSS is stored in a single file (on a large project), it balloons and quickly becomes overwhelming to manage.