There's no point on creating a function to move it back, you can use moveObject with the timer.
local gate = createObject ( 3115, -1456.8000488281, 501.39999389648, 9.8999996185303, 0, 0, 0 )
function moveGate ( psource )
local Deadusergroup = getAccountName ( getPlayerAccount ( psource ) )
if isObjectInACLGroup ( "user."..Deadusergroup, aclGetGroup ( "Admin" ) ) then
moveObject ( gate, 8000, -1456.8000488281, 501.39999389648, 16.9 )
setTimer ( moveObject, 20000, 1, 8000, -1456.8000488281, 501.39999389648, 9.8999996185303 )
end
end
addCommandHandler ( 'carrier1', moveGate )