The daemon forks, then opens a socket to communicate with. All access to the databases comes from the same process (clients request access through the socket). The side effect of untie not returning is that the daemon stops responding to the socket and the client code takes to mean a dead process and 'cleans up'. So as far as I know, only one process ever accesses the databases at any given time.
I'm going to rewrite the code to use flat files and see if that fixes it (good thing I wrapped it up in a package first!). The data being stored is simple text and doesn't need any fancy massaging.