History audit log - unique field across all types of history

I’m trying to log all activity that flow through my various processes and subprocesses.
I’m using Spring Boot and i’ve got event listeners setup to handle TaskEvent, ExecutionEvent and HistoryEvent events dispatched by PublishDelegateParseListener and PublishHistoryEventHandler

It was my understanding that a business key / process instance ID should be enough to unique identify all entries, however in practice this is not the case; I’m seeing about 25% of the entries contain no reference to the primary process ID (searched across processInstanceId, calledProcessInstanceId, rootProcessInstanceId, superProcessInstanceId) - this is for HistoryEvent and ExecutionEvent entries.

Those entries do have references to my business key, however (except for TaskEvent entries which have neither).

Am I missing something fundamental?

As a side note, looking at the act_hi_taskint table, there is a proc_inst_id_ column which contains the process instance ID I’m interested in?