timer.performWithDelay(20, moveB, 5)
Говорит: после 20 мс вызова moveB, сделайте это всего 5 раз.
Так как это просто регистрация синхронизированного вызова moveB, все, что происходит после этой строки, выполняется немедленно.
Поскольку вы уже установили эти свойства перед оператором if, нет необходимости делать это снова внутри оператора if. Не действует.
A.isVisible = false
B.isVisible = true
if fastSquare then
B.x, B.y = A.x, A.y
timer.performWithDelay(20, moveB, 5)
A.isVisible = false -- obsolete
B.isVisible = true -- obsolete
end