Jumping in because I went through some of these issues once upon a time and here is what I came away with.
In an MVC application, even the desktop-based ones I've applied MVC too, you almost always have a new set of Controllers and Views per application. In my experience controllers are almost never reusable and are almost always bound to a single view. Even between web applications you rarely reuse just a controller unless you're grabbing the entire vertical slice, model, controller and view. This is where service and helper layers come in.
Don't get caught up in the word "Service", that doesn't mean it has to be a physical service running on a server somewhere; it just means a discreet, reusable bit of functionality wrapped in a single interface. I've found that a service is really just a fancy way to say a Facade pattern stretched over your model, or a viewless controller, such as a login service that takes in a login and password and gives the ya or nay on the combo and requires a concrete model-backend.
A perfect example is that for one of my sites I allow developers to access the site's API as long as they have a valid developer token, so I have a "TokenService" that has these methods:
-
IsValidToken
-
CreateToken
-
DeleteToken
I don't have any views that support displaying or editing of tokens, I just create them under the covers so a full Controller is overkill. I also have some desktop-based Windows Services running that do some token maintenance so they need access to the TokenService as well. Including a full Controller in a Windows Service would be silly, because I don't need the entire MVC framework dragged into my little service app, I literally only want to create and delete tokens using a fully tested interface, my TokenService.
My rule of thumb is that a controller only moves data from the model into a view and back again, applying any needed validation and filtering. If it's logic I may need in non-UI situations, like my tokens, I tend to create services that are either just class libraries or when I need to expose my service to others, full blown SOAP or REST-based end-points.
Lastly (sorry this is a long, rambling post) I can see how controllers can be confusing. They seem like a perfect place to put *all* of your business logic for a certain entity, so if you have a ProductsController you might have RestockProducts() and CheckInventory() and IsProductOnSale() and ProductIsOrganic() yet in MVC the controllers tend to be less about those types of methods and more like ways to link data to html. So the question becomes, and I think that's the crux of this thread, where do you put those methods?