I'm not sure, as I understand the write object that should work. I've never tired writing an object like that, I try to keep things simple. If I need lists of lists I will generally design a class to handle it.
You might try saving each entry individually and see if you get better results, such as:
. . .
raf.WriteB4XObject(presets(0), 0))
raf.WriteB4XObject(presets(1), raf.CurrentPosition)
raf.WriteB4XObject(presets(2), raf.CurrentPosition)
. . .
. . .
presets(0) = raf.ReadB4XObject(0)
presets(1) = raf.ReadB4XObject(raf.currentposition)
presets(2) = raf.ReadB4XObject(raf.currentposition)
. . .
I'm old, so I "grew up" with unreliable mapped network connections, drives that gave the odd I/O error and so on therefore wrapping any kind of disk I/O in a try/catch block is like a nervous tick for me.
How critical it is here would be a question better answered by Erel