Я нашел причину, по которой я пропускал некоторые пакеты: шаблоны поиска должны быть перечислены в фильтре захвата в последовательном порядке.
Например, этот фильтр может пропустить некоторые пакеты:
udp[18:4]==0x12345678 or udp[24:4]==0x12345678 or udp[20:4]==0x12345678
потому что область действия последнего шаблона (20: 4) находится в данных позже, чем предыдущий шаблон (24: 4).
Чтобы работать должным образом, фильтр должен быть написан так:
udp[18:4]==0x12345678 or udp[20:4]==0x12345678 or udp[24:4]==0x12345678
Я неизвестно правильно выписал фильтр в оригинальном вопросе; мой код имел фильтр в неверном формате.