I figured it out.
Calling listView.setItemChecked(-1, true); causes it to appear automatically due to a checked state change which is what the default long click does.
I believe the end result will indeed put a key with -1 into the SparseBooleanArray returned by getCheckedItemPositions(), but when iterating over that array I pull indexes from a loop that starts at 0 and goes up to my ListView's item count and thus will never check negative keys.