Let me give a crisper solution using data.table & tidyverse without using specialised functions like pivot_longer.
Load the data:
library(data.table)
library(tidyverse)
dt <- data.table::data.table(
Item = c("A", "B", "A", "B", "A"),
ItemN = c(100L, 200L, 100L, 200L, 300L),
Date = c("22/01/2022","15/01/2022","20/03/2022",
"16/02/2022","10/02/2022"),
Type = c(511L, 511L, 711L, 711L, 511L),
Description = c("Desc1", "Desc2", "Desc1", "Desc2", "Desc3")
)
And now the simple piped code giving the output:
dt[dt,on = .(Item,ItemN)][Type == 511 & Type !=i.Type] %>%
setnames(c("Date","i.Date"), c("outDate","inDate")) %>%
dplyr::select(-ends_with("Type"),-starts_with("Desc"))
The solution provided by @yifanliu is also correct. I just posted another one for fun 
Cheers