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 )