Event "Pileup" happening for chatlogs

I’m currently writing a pretty simple chatlog script. Here’s how it works:

When a player chats, the server filters the message, and puts it in the Chatlogs table. This also fires the “ChatlogUpdate” event to all admins in the game, passing the string as an argument.

When a player opens the Chatlogs, they invoke GetChatlogs to get the full table of chatlogs, and connect a function to ChatlogUpdate (which is disconnected upon close). For some reason, every instance that “ChatlogUpdate” is fired is suddenly received. For example:

If I chat “hi” 4 times, and then open up the chatlog, 8 messages will appear saying “[marfit]: hi”. Further analysis indicates that the first 4 messages come from GetChatlogs, which is normal. The next 4 come from previously fired (does not matter how long ago, I’ve waited a full minute and it still does this) events mysteriously being received.

This does not happen in my commands logger, which is almost identical. I’m confused.