You move predicate lock during split only when new leaf page is allocated. However SP-GiST may move items to the free space of another busy page during split (see other branches in doPickSplit()). Your patch doesn't seem to handle this case correctly.
------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company