Well putting it in the view (or view helper) seems wrong to me. You're tying the view in to a specific layout meaning I can't reuse a view for both the admin area and normal site (or ajax requests, etc)
All approaches mentioned so far are valid. However, in some cases not really useful:
Let me take a step back and ask: What scenarios may we need to change the layout?
Admin area as mentioned.. This will use specific controllers so putting it in the controller makes sense
"Printable version of this page". Tough one, for this I currently use a specific controller which sets the layout then initialises the desired controller and passes the request along. e.g. /user/list/2 becomes /print/user/list/2 so everything is wrapped through the print controller. Kinda messy but printable pages need their own URI and application specific logic certainly does not belong in a generic front controller. While not always necessary (it should be possible with stylesheets alone, sometimes it's not)
Ajax requests There's no reason an ajax request shouldn't be able to call the same controller and just bring back the view html from the controller without the layout. In this case it certainly belongs in the front controller, checking the request type and selecting the layout. This logic certainly shouldn't be in the controller.
Site-wide layout selection logic. On some sites you may have different layouts depending on certain factors. I'll use "Account Customer"/"Normal Customer" as a simple example. Clearly this needs to apply to all controllers.
When outputting to a different data type (image, pdf, etc). I'd generally say this belongs in the controller or view.
My biggest issue, is there are times when it's needed in multiple places with no clear or consistent order of precedence:
-If I make an ajax request in the admin area, it needs to use the ajax layout: Front controller has precedence
-if I'm an "Account customer" and request an image, it still needs to display as an image: Controller has precedence