Yes I think there is a conversion because the function used here is group_by that result in a special object know only by dplyr then. It makes sense because the concept of grouped data.frame are one of dplyr.
If you just filter, you keep a df and get no tibble
library(dplyr)
library(data.table)
library(magrittr)
data.table(
ID = c("b","b","b","a","a","c"),
a = 1:6,
b = 7:12,
c = 13:18
) %>% setDF() %T>%
{cat(c("---", class(.), "---"), sep = "\n")} %>%
filter(row_number() == 1) %T>%
{cat(c("---", class(.), "---"), sep = "\n")}
#> ---
#> data.frame
#> ---
#> ---
#> data.frame
#> ---
#> ID a b c
#> 1 b 1 7 13
Created on 2019-03-04 by the reprex package (v0.2.1)
So you are right, what I suggested is not totally true - or at least not so simple. The conversion seems to append in C++ function from the code . I don't think it copies the all data.frame. I let you look at size and uses dplyr::changes() to look for difference.
Also, I don't think as_tibble will make a full copy if you apply it on a data.table. I think it will just change classes and rownames, there is no reason data are modified. Try and see with dplyr::changes()