One issue is that select_preferred_address() is stateless and does not consider a previously deleted address. Often it simply picks the first address in the address list.
When an existing association is using the preferred address and that address is deleted, HIP likely will pick the first address in the address list. Readdressing may be successful using this address. The kernel may choose a different source address for the ESP packets since RAW_IP_OUT is not used (see hip_esp.c).
Example:
1. initiator has addresses 10.0.0.10 and 192.168.0.1, with a default route to 10.0.0.1
2. responder has address 192.168.0.2
3. preferred address is specified in initiator's hip.conf to force HIP to use 192.168.0.1
4. address 192.168.0.1 is deleted and 192.168.0.5 is added on the initiator
5. HIP will readdress using 10.0.0.10 as preferred; ESP traffic will flow using 192.168.0.5 as the source address
HIP and the kernel have chosen different addresses.
The hip_esp_input() thread uses the SPI for lookup and does not care (on the responder's side) that packets are coming from another random address.