follow-up review of a custom Undo Manager
I think you should not clear _redoCommands stack when you are re-doing command. Actually you should be able to continue re-doing command until you will restore state when you called first undo command. You should clear redo-commands when completely new command arrives:

public void ChangeState(Command command)
{
    command.Execute();
    _undoCommands.Push(command);
    _redoCommands.Clear(); // new command arrived, you cannot redo anymore
}

public void RestorePreviousState()
{
    if (!_undoCommands.Any())
        return;

    var command = _undoCommands.Pop();
    command.Undo();
    _redoCommands.Push(command);      
}

public void RedoPreviousState()
{
    if (!_redoCommands.Any())
       return;

    var command = _redoCommands.Pop(); // commandPop a little strange name :)
    command.Execute();
    _undoCommands.Push(command);        
}


Also I'm thinking on improving naming... because RestorePreviousState() looks like restoring state which was before last state change - i.e. two call of this method should leave object in initial state.

UPDATE: I'd go with UndoStateChange and RedoStateChange without word previous - I find such terms less confusing. Also I'd think about making public properties for checking available state changes. Because currently it's not clear whether state changed or not. You call UndoStateChange and nothing is returned whether state changed or there is nothing to undo.