When looking at this series, I found more disturbing thing in existing code - static BOOL bGroupSelect = TRUE; in mouse selection helper.
Not only it's global, but it also does not work correctly as far as I can tell. I tried with LVS_ICON case, and when alternating ctrl+click, ctrl+shift+click, selected pattern does not match what I see on Windows.
Do you think you can look into that before fixing owner-data case?