А не проще просто пройти по узлам и сохранить открытые.
Код:
var
Ini : TIniFile;
...
For I := 0 To tvTree.Items.Count-1 Do
If tvTree.Items[i].Expanded Then
Ini.WriteBool('Section',tvTree.Items[i].Text,True);
...
PS. Код писал по памяти - с деревьями давно не работал. Может там не Text, а Caption и не Items, а Nodes. но это не меняет принципа.
PPS. А вот восстанавливать состояние дерева интереснее. Надо прочитать список имен узлов в список строк, потом идти по этому списку, получать сохраненное значение, находить узел с нужным именем и раскрывать его.