Всем привет все мы знаем , что
Вообще не факт. 
const one = async () => { console.log(1) } 
const two = async () => { console.log(2) } 
await one()
await two() // Выведет 1 потом 2
Вот так - факт.
Метод checkAuth синхронный, смысла делать его async нет. 
Вот, что происходит в вашем случае:
dispatch(loginUser(data)); // должна отработать первее
Не должна. Она асинхронна, поэтому ваш код 
гарантированно не выполнится раньше, чем все остальные строки в слушателе события.  Плюс в ней есть запрос к серверу, что еще больше гарантирует её выполнение после checkAuth. 
dispatch(checkAuth()); // должна отработать позже
Не должна по причине, указанной выше. 
Достаточно простого фикса:
onClick={async () => {
          setEmail("");
          setPassword("");
          await dispatch(loginUser(data)); //  теперь мы точно дожидаемся выполнения
          dispatch(checkAuth()); // эту функцию следует просто сделать синхронной, добавлять здесь await не стоит. 
        }}