I prefer to use whatever's native to the platform. On Debian that means start-stop-daemon; on CentOS the init.d functions.
It's a whole "my house, my rules" strategy. If you play nice with the underlying platform, it'll play nice with you. The downside is that you do have two packaging models to build for. I know that abstracting this is one of the motivations for Chef et al. I have yet to see a usage where this was worth the opportunity cost.
What do you recommend for managing the running state of processes, etc?