Notice that the shoot command is taking nearly seven seconds to complete. What, if anything can I do to improve on that time?
Assuming you can accept fixed exposure, focus and zoom (seems probably true for a bookscanner) the biggest thing you can do to improve shooting rate is to hold the camera in half press between shots, or using continuous mode and
shooting hooks to control shot timing.
Using remoteshoot should also speed up the process overall, since the time to transfer over USB is similar to what is required to write to a fast SD card.
This requires a slight different approach than your current script, since you need to have a long running script on the camera that signal it each time you want to shoot, instead of invoking chdkptp each time.
The chdkptp rsint command is made for this kind of application. You set the exposure options etc once when you invoke the command (similar to shoot), and then every time you input 's' it shoots. See help rsint for details.
Alternatively, you could write you own camera side script which you start once and then send messages with invocations, like
chdkptp '-e"connect -b=001 -d=019" -e'putm shoot'
In particular, I know I need to do some more reading on the shoot parameters u, tv, sv and nd since I more or less pulled those from other forum posts or the air.
-u controls what units the other exposure related options are interpreted as. The default is conventional units, e.g. shutters speeds as 1/100, ISO as 100, 200 etc.
The ISO you probably want set to the minimum Canon UI value, like -svm=80 (svm and sv are similar, but svm lets you use the same values seen in the canon ui)
Shutter speed should be whatever gives you good exposure in your lighting. ND should probably out, unless you are shooting outside in bright sun, but probably doesn't need to be set manually.