More observations.
As we can see, a normal egg has ID 26->47->48 per destruction. 48 seems to stand for explosion animation. Those eggs that duplicate don't have an explosion. It's because in the code, it's checked what value $F5 is, and during all the game, it's 0, 0x56, or 0x64. But on that single little screen, 0x66 is written there, several times. And by the looks of it, it's related to fish spawn, that appear as you walk near them.
Walking down over there spawns other enemies, and fishes don't jump. But whenever $F5 == 0x66, eggs duplicate. Unfortunately, during the whole game, $F5 is still 0, 0x56, or 0x64, and both latter numbers get checked away per egg destruction.
Language: asm
02:B304:A5 F5 LDA $00F5 = #$00 ; read from $F5
02:B306:F0 0B BEQ $B313 ; if zero, branch to $B313
02:B308:B9 9F B3 LDA $B39F,Y @ $B3BD = #$66 ; read from ROM by offset
02:B30B:30 26 BMI $B333 ; if minus, branch to $B333
02:B30D:C5 F5 CMP $00F5 = #$00 ; compare $F5 to #$66
02:B30F:F0 20 BEQ $B331 ; if equal, branch to $B331
02:B311:D0 2A BNE $B33D ; otherwise, branch to $B33D
02:B313:B9 9F B3 LDA $B39F,Y @ $B3BD = #$66 ; read from ROM by offset (again)
02:B316:10 02 BPL $B31A ; if plus, branch to $B31A and write #$66 to $F5
02:B318:A9 56 LDA #$56 ; otherwise, write #$56 there
02:B31A:85 F5 STA $00F5 = #$00
02:B31C:4C 31 B3 JMP $B331 ; go to end
[...]
02:B331:18 CLC
02:B332:60 RTS ---------------------- ; good bye
02:B333:A5 F5 LDA $00F5 = #$66 ; read $F5 once again
02:B335:C9 56 CMP #$56 ; if #$56, go to end
02:B337:F0 F8 BEQ $B331
02:B339:C9 64 CMP #$64 ; if #$64, go to end
02:B33B:F0 F4 BEQ $B331
02:B33D:20 38 81 JSR $8138 ; otherwise, go to $8138
; and there, we see:
02:8138:A9 00 LDA #$00 ; take 0
02:813A:9D DA 03 STA ID,X @ $03DF = #$47 ; write to ID instead of 48!
02:813D:BC B2 04 LDY $04B2,X @ $04B7 = #$0D
02:8140:30 02 BMI $8144
02:8142:91 65 STA ($65),Y @ $7D2A = #$00
02:8144:60 RTS -----------------------------------------