Have had to re-confirm this for myself a few times:
filter(mtcars, cyl < max(cyl), hp < max(hp)) |> dim()
# [1] 18 11
# vs
filter(filter(mtcars, cyl < max(cyl)), hp < max(hp)) |> dim()
# [1] 17 11
This in ?dplyr hints at what's going on:
If multiple expressions are included, they are combined with the & operator.
But this behavior is a bit more subtle / worth calling out IMO. This came up again recently here:
r-lib/lintr#2305 (comment)
FWIW it's also really not clear from reading the filter.data.frame implementation without being well-versed in {dplyr} internals.