You confused what the order and rank do, from ?order:
order returns a permutation which rearranges its first argument into
  ascending or descending order.
order does not return a rank of the actual value but an index vector which can be used to sort the vector, compare the following result:
foo %>% mutate(dplyr_order = order(time), dplyr_rank = rank(time))
#                  time expected_order dplyr_order dplyr_rank
# 1 2016-08-31 13:40:00              3           2          3
# 2 2016-08-31 06:40:00              1           3          1
# 3 2016-08-31 10:40:00              2           1          2
The result from rank is what you are expecting. The result from order tells you that the second element in time is smallest, followed by the third element and the first element is the largest.