While that does seem a big odd, you have also already described the solution: Commit the new record. You can use the OnRecordLoad trigger to commit the record automatically each time a new record is created and then this will not happen.
I think it is a BUG. I reported it.
Personally I do not like to commit records that are not valid. I'd have to commit the record without a parent first, which should be avoided. If I commit the record first, I need to do all kinds of checks to avoid that the record is left like that.
After a lot of experimenting, I found a solution.
If define a global field on the table, which I fill in the OnObjectEnter of the parent field with the current value of keyID and I add the following to the relationship:
table1::keyID <> table1LOV::g~keyID
then it works.
This is very weird and looks to be a BUG.