Here are my results
[20:09] *** Now talking in #test1234
[20:09] *** devlin.openprojects.net sets mode: +n
[20:10] *** Joins: fenrus (~
pennsy@soft.nu)
[20:10] *** Joins: GG1 (~
pennsy@soft.nu)
[20:10] *** Joins: bottus (
ferals@techmonkeys.org)
[20:10] *** slennox sets mode: +o bottus
[20:10] *** bottus sets mode: +t
[20:10] *** bottus sets mode: +oo GG1 fenrus [6 secs]
[20:11] *** slennox sets mode: -o GG1
[20:11] *** bottus sets mode: +o GG1 [5 secs]
[20:11] *** fenrus sets mode: +o GG1 [5 secs]
[20:12] *** bottus was kicked by slennox (slennox)
[20:12] *** Joins: bottus (
ferals@techmonkeys.org)
[20:12] *** fenrus sets mode: +o bottus [5 secs]
[20:12] *** GG1 sets mode: +o bottus [5 secs]
It needs to be kept in mind that the autoop, protectop and /msg op features are inherently fast since they require no communication at all between the bots - a bot just sees the join, deop or msg and reacts instantly, and they are slowed only by eggdrop's queue. botnetop.tcl is hampered by a larger number of factors including botnet communication, extensive verification, and the time it takes the bot to 'sync' the channel after joining (plus internal delays built into the script to wait for this to occur).
I do see some tweaking that can be done to the internal delays. It's possible (with bop_delay set to 0) the extended delay you're experiencing is the result of bots taking longer to sync than the internal delay provides for, causing a 'miss' condition that results in the bot waiting for its need bind to trigger before a request occurs.