This seems to work:
seedRandom(index,true);
moveDistance = 100;
moveEvery = framesToTime(25);
startPos = [960,540];
moves=[startPos];
possibleMoves = [[1,0],[-1,0],[0,1],[0,-1]];
st = thisLayer.startTime;
// create all moves up front
for (i=0; i < (thisComp.duration - st); i+=moveEvery) {
move = possibleMoves[ Math.floor(random(4)) ];
lastPos = moves[moves.length-1];
newPos = lastPos + move*moveDistance;
moves.push(newPos);
}
t=(time-st)%moveEvery;
step = Math.floor((time-st)/moveEvery);
easeOut( t, 0, moveEvery, moves[step], moves[step+1]);