Hello Tom,
It seems to be working the same way when you load the data, so, you can have the $open property in the loaded task object, and it will be expanded the same way as if it was the open property:
However, Gantt considers all properties starting from $ as temporary or internal properties. And when you save the changes, these properties are removed. So, the $open property is removed from the task object, but the open property remains.