I've simplified the 'worlds most complex unfold' and it now works - at least for well formed input.
For reference, here's the type signature of the final version. I needed lexically scoped type variables so I could put type signatures on the internal definitions:
beamingAUnfold :: forall outer_state inner_state a interim ans.
([interim] -> Maybe ans)
-> (outer_state -> inner_state -> Maybe (outer_state,inner_state))
-> (a -> inner_state -> BStep interim ans inner_state)
-> outer_state -> inner_state -> [a] -> ([ans],[a])