I hit this problem a while back when moving to Buster and pursued it via this group before the conversation eventually came to a dead end and I decided I just had to live with the (admittedly small) inconvenience or stick with earlier versions of Raspbian for my legacy systems.
Then came Bullseye and the issue re-emerged.
And so I found this thread.
I've also gone for the Crontab solution but I didn't want to restart webiopi at timed intervals because there may be occasions when I've stopped it for a reason and don't want Crontab jumping in and restarting it. I only want Crontab to start it when the Pi first boots (or reboots).
Crontab allows us to do this with @reboot
So @reboot sudo service webiopi restart
However this didn't get webiopi started!
The solution is to make it pause for a short while before executing the restart
crontab with $ sudo crontab -e
@reboot sleep 20;sudo
service webiopi restart
So I now have webiopi starting at boot on a Pi3 running Bullseye
I guess you would call this a workaround - but it's one that I'm perfectly happy to adopt.
A 20 seconds pause may be overkill. It may well work with smaller values but in my case 20 seconds works fine.