Не думайте, что CanExecute будет вызван с Execute. Интерфейс для ICommand не подразумевает, что он вызывает CanExecute при вызове Execute, поэтому, если для вас важно, чтобы он выполнялся только тогда, когда CanExecute имеет значение true, просто проверьте его самостоятельно.
Кроме того, сканируя декомпилированный код для RoutedUICommand, я нигде не вижу, чтобы проверял CanExecute в Execute.
Потребитель несет большую ответственность за определение того, когда вызывать Execute / CanExecute.