Answer
The field needs to be a Persistent custom field, not a Read Only one — a Read Only field type re-evaluates and displays its expression live every time the record is viewed (which is exactly the symptom described), while a Persistent field type actually stores a real value in the database at the time it's set, keeping that stored value afterward regardless of who's viewing it later. Build it as: a Persistent custom field, with its Default Value set to the PL/SQL Expression IFSAPP.FND_SESSION_API.GET_FND_USER() (auto-populating the current session's user only when a new record is created and saved), and then — separately — apply Read Only at the page/Properties level (RMB > Properties > Read Only) to stop users from editing that captured value before saving. The two 'Read Only' concepts are different: the custom field's own Field Type controls whether a value is stored at all, while the page-level Read Only property just prevents editing of an already-stored value.