Building on @siddharthprabhu 's just a smidge, if you have cases where you may have even more than 2 and that is useful to know, you can get to that as well by having a result that shows the number of duplicates when there is at least one duplicate:
df <- df_linelist %>% group_by(case_id) %>% summarise(occurrences = n()) %>%
filter(occurrences > 1) %>% arrange(-occurrences)
If you actually then want to compare the duplicates and the values in other columns in the original data frame (to see if they truly are duplicates for the entire record or, rather, if there are actually values elsewhere in the data frame that differ between the duplicates), you can join the filtered list back onto itself to get the complete data frame (all columns) but just with duplicate rows:
df <- df_linelist %>% group_by(case_id) %>% summarise(occurrences = n()) %>%
filter(occurrences > 1) %>% arrange(-occurrences) %>%
left_join(df_linelist)