It is difficult to answer your question without more context. What version of PRPC/Pega are you using? If possible, a stack trace and screen image of the activites in question may allow someone to determine the cause of the NPE.
1) Make sure you use something like a "StepStatusFail" test as a post-condition on each obj-open-by-whatever so you don't continue with code that assumes the page has been populated when it may not have been.
2) I don't understand why you would want an obj-refresh-and-lock right after an obj-open-by-handle. Wouldn't the obj-open-by-handle already have refreshed and locked ?
3) If your commit is only to commit what was just obj-save'd, can you remove it and use the "write now" checkmark on the obj-save ? See if that makes a difference even though it's not exactly clear why it should, but it's in general safer since the "write now" checkmark will commit only what you wrote with obj-save rather than committing other stuff not even involved with your local activity at all.