Below is my code, first is where I raise the event and second section is where I consume it in another class. It seems pretty straight forward, but the logs are showing that
How many times is this being called? If this gets called multiple times then your event will be called multiple times.
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived;
As a test, you could remove the delegate just before you add it:
ibSerialPort.OnPacketReceived -= ibSerialPort_OnPacketReceived;
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived;