I've finally got it all working...
The end goal for me was to get the scan buttons working. By the time I figured it out, I got the scan buttons working AND network scanning also.
Turns out I was looking at it the wrong way, and consequently going at it the wrong way. I'm sorry I can't write down the exact sequence of commands to make this work as I've made quite a mess by the time I was done. But I hope I can at least help with the general logic of it.
So, either scanbd (the scanner button service) or saned (the scanner network server service) can access the scanner, but not both at same time. scanbd locks the scanner by constantly refreshing the button state, and saned locks it for use as a network scanner.
The way it works is by using ONLY scanbd as a service. scanbd then gets to monitor the state of the buttons constantly, and fire some action if a button is pressed. But it also gets to listen on the sane-port 6566 (tcp). If it detects traffic, it stops monitoring the buttons and starts up the saned service that then takes over. When saned is done being a network scanner server, scanbd resumes to wait for a button press, or more network traffic on the sane-port.
In order for this to work, saned must be configured twice. Both as server and client on the same machine. The server part gets started when scanbd detects network traffic and is described in the paragraph above.
The client part gets started either manually when you initiate a scan via scanimage, or when scanbd detects a button press. The saned client should be configured to connect to a network saned server (the same machine, so localhost, 127.0.0.1 or host name, backend 'net') - NOT USB - thus avoiding conflicts with scanbd. scanbd then detects some network traffic on port 6566 and fires up saned as server, just as if it was really some network client.
The client config is in /etc/sane.d while the server config is in /etc/scanbd/sane.d. The server config must be copied there from /etc/sane.d (just copy the entire folder) and then modified to act as a server and communicate to the scanner via usb i.e. whatever backend the scanner actually uses. In /etc/scanbd/scanbd.conf the SANE_CONFIG_DIR should point to the saned server part: /etc/scanbd/sane.d
Edit: Also, if the machine is firewalled, open port 6566 and load kernel module nf_conntrack_sane:
sudo ufw allow 6566/tcp
sudo modprobe nf_conntrack_sane
and if it then works, add nf_conntrack_sane to /etc/modules
From: https://superuser.com/questions/1043092/sane-scanning-scanbd-buttons-and-service-permissions