Yup. OpenRC is about as good a traditional sysvinit implementation as I've seen anywhere - it certainly is much better than what many of the anti-systemd crowd are currently using. However, I get this kind of behavior on Gentoo all the time and is just one of the reasons that I migrated to systemd.
With systemd I can stop a service, and it STOPS, unless there is some kind of kernel bug (can't help that other than to not use less-stable kernel features). It won't have any orphans. It won't have PID files left around. Etc. When I start a service it starts, and if it dies unexpectedly I get a failure status.
I'm using systemd to replace my cron jobs now, and for the first time I actually am taking notice of things like return codes. SystemD by default expects them to be zero (gasp!). If something normally exits with something else you can tell it to ignore it, but now when something fails I actually notice.
If daemons support it systemd can behave as a watchdog beyond just seeing if the process exists. You can put some code in the idle loop to ping systemd and on a timeout systemd will restart the process. Of course, it isn't a substitute for a protocol-specific watchdog, but your monitoring service can remotely connect via ssh and restart your process, and be sure it actually restarts instead of playing games like the one you just described. I used to run monit with OpenRC and I had to play all kinds of kill/zap/etc games in scripts to be sure it would actually restart processes.