Lua различает 2 типа таблиц: массивы, индексированные номером, и хэш-таблицы.
Обычный массив задаётся синтаксисом вида
local t = {1, 2, 3, "Вася"}
т.е. когда мы к элементам таблицы можем обращаться по номеру т.е. по индексу.
Lua старается по возможности всегда так хранить таблицы (как индексированные массивы), пока это возможно.
Если же в таблицу добавляются элементы вида "ключ-значение", причем ключ - не число, то таблица хранится уже с использование хэша для обеспечения максимально быстрого доступа к элементам по индексу.
Например, если таблицу задаем как
local t = {}
t.name = "Вася"
t.surname = "Петров"
В этом случае элементы сортируются по внутренним правилам хэша и последовательный обход элементов осуществляется с учетом этой сортировки. Причем сортировка - на основе значение хэш-функции, а это значит, что никакой связи со значением ключа - нет.
Что касается приведенного примера - то вполне вероятно, что внутри grid использует какой-то другой вариант для обхода элементов таблицы, что приводит к наблюдаемым различиям с порядком заполнения.