It seems like group_by implicitly orders the grouping variables. If you try
d_rev <- d %>%
arrange(desc(b))
group_data(d_rev %>%
group_by(a, b))
the result is
# A tibble: 5 x 3
a b .rows
<chr> <int> <list>
1 a 1 <int [1]>
2 b 2 <int [1]>
3 c 3 <int [1]>
4 d 4 <int [1]>
5 e 5 <int [1]>
so - in this case it orders first by a and then by b even though we don't see that explicitly because they are ordered in the same way. So, you can try to "trick" group_by like this:
d %>%
arrange(desc(b)) %>%
group_by(a, mb = -b) %>%
group_map( ~ ., keep = TRUE)
but that will still not work since it will first order by a. So finally, you can do this
d %>%
arrange(desc(b)) %>%
group_by(ma = rev(a), mb = -b) %>%
group_map( ~ ., keep = TRUE)
which will order the list as you wish (and then you can remove the unnecessary ma and mb). But in a more general case where a and b can have a more complicated relationship this will not generalize.