Hey kxu,
I am happy that you could narrow the issue down.
It is of course really interesting, what actually is "wrong" with the values inside the customer field, that cause such an issue.
Actually there are several possible "workarounds" I would work on myself in such a case. It all depends on which outcome you want to achieve. Whether it is simply accessing the records over the UI at all or working with/processing the records further.
Let's say I simply want to access these records at all.
What I would do, is write a little WorkflowActivity in C# which can read all value inside the Customer field and then populate a multiple-line of text field with each value/record in its own line. Since the customer field can contain different entities, I would write my logic to read the entity, the Guid and the Name of each record (e.g. "Entity: account, Guid: 12345, Name: ABC").
After I retrieved all values and wrote it into my custom multiple line of text field, I would clear (null) the customer field programmatically.
Then I would create an OnDemand workflow for the SA and put my WorkflowActivity inside as a step.
So in the end I pick one of the "problematic" records and run my workflow on it. I would guess that once the customer field is "clear", the record should be accessable again.
On the other hand I would also check whether the records which were written into that Customer field are still valid in the system.
Maybe try to populate the Customer field record by record. Save the SA after each entry and reload the form.
So long story, short: This is a possible approach on how I would try to narrow the issue more down.
I hope you will be successful.