the lease time is set to 15 mins, after which all devices keep dropping off for a few seconds and reconnecting.
That's not normal behavior. A standard DHCP client tries to renew a lease after half the lease time. If that fails it'll keep retrying until the lease runs out and then fall back to some default (link-local/APIPA mostly).
You might want to check why the DHCP clients behave like that. Recheck their settings and eventually run a packet trace to find out what's going on.
Also, you might want to consider a longer lease period. For most purposes, something between a few hours and a few days might be more useful.
lease time is so short because we process devices for resale and have thousands of unique devices every day. our processing network is a /22.
You should have a dedicated subnet with short lease period for that.
The only way i've found is to reserve them AND set the devices to static addresses physically on them to stop it happening. I thought a DHCP reservation would suffice.
That disables DHCP altogether and defies its purpose.
is there a best practice way to trunk all of the DHCP scopes over one NIC?
You can either connect the DHCP server to each VLAN directly or use a DHCP relay on an intermediate switch or router.
i've had to create a separate virtual NIC on the DHCP server VM for each VLAN
That's the connect the DHCP server to each VLAN directly venue - should be working.