However, page might be exclusively locked before. And in this case CheckForSerializableConflictIn() would be skipped. That happens very rarely (someone fixes incomplete split before we did), but nevertheless.
if xlocked = true, page was already checked for conflict after setting exclusive lock on it's buffer. I still do not see any problem here...