The problem is most likely that you are not really creating a new database connection. You have Apache::DBI in there, so there are persistent connections being carried across the fork and when you think you're opening a new one you are really just pulling an old one out of the Apache::DBI cache. You can test this theory by turning on Apache::DBI's debugging.
You can force the creation of a new handle by adding an extra, useless parameter to your connect arguments hash. It will be ignored by DBI, but it will prevent your connection from matching the established one in the Apache::DBI cache.