Jenkins managing a pool of servers across restarts
I found the missing piece in the Lockable resource plugin.

lock(label: 'server-pool', quantity: 1) {
   ...
}


Now the servers to be used for testing don't need to be managed as slaves at all and that greatly simplifies things.