Those of you arguing MVC semantics might want to browse through this forum and read some old posts. This has been discussed quite a few times, and some very good consensus reached. Particularly look for the posts by the people actually creating the ASP.NET MVC framework, as they have some pretty clear ideas what MVC is in general, and what ASP.NET MVC is in particular.
One thing that helps me is getting rid of typical n-tier thinking, particularly "business logic". Business logic is too synonymous with the middle tier in 3-tier design. MVC is different enough from 3-tier that direct correlations don't work very well, and can confuse things all too easily (this thread is the perfect example). So throw Business Logic out, don't give it any place in the terminology.
Here's how I think about it and explain it to others, and it seems to work quite well. In MVC you have Domain Logic and Application Logic. Your Model is your Domain Logic and your Controllers are your Application Logic. If any logic has to do with the application, with routing, making decisions about where to direct the user, what (control) objects to create and correspond with, this is the job of the controllers. If any logic has to do with state, with persistence, with validation, with the domain, this is the job of your model.
The Model should be application-agnostic (which means reuse, sorry davethieben). Controllers are application-specific, and therefore have limited reuse (you wouldn't reuse controllers written for a web application in a Windows application, etc.).
Breaking things out into separate assemblies has all kinds of motivations. Not the least of which is parallel development.