You're using the template::util::list_to_multirow proc incorrectly. The sublists in the list of lists that you pass to it should be formatted so that they can be passed to array set:
set mylist [list [list col1 a col2 b] [list col1 d col2 e]]
template::util::list_to_multirow multi1 $mylist
set test ""
for { set i 1 } { $i <= ${multi1:rowcount}} { incr i } {
append test "multi1 = [array get multi1:$i]\n"
}
Which will give you:
set test
multi1 = rownum 1 col2 b col1 a
multi1 = rownum 2 col2 e col1 d
What I suggested previously was that you could patch template::util::list_to_multirow to also work with your format where you pass in a separate column name list:
set mylist [list [list a b] [list d e]]
set col_names [list col1 col2]
template::util::list_to_multirow multi1 -column_names $col_names $mylist
and both versions would give the same result. The only difference would be where the list is formated. Your version formats the list internally in the proc, and the original version expects that the list is passed to the proc pre-formatted so that the sublists match the array set format.