The behavior you have described is the contract of Obj-Save - save the step page which has the keys of the instance to save set on it.
If you need to orchestrate saving every record in your list, iterate over the list and issue an Obj-Save for any member of the list that needs saving. Can I also recommend Savable Data Pages if you have not investigated these yet.
Be sure to only issue Obj-Save events against instances that are either brand new, or have been loaded using Obj-Open(-By-Handle). If you were to issue an Obj-Save on members of a page list that were returned by a Report Definition then these are almost certainly not the complete instance, and you risk data loss by overwriting the full instance with edits to the partial results retrieved by the report.