Thanks for the excellent report and patch Chris!
The only part missing is a release note for 5.2.9 as this is a bug in a newly introduced feature and thus still qualifies for backport.
I don't know if this will always be the case, so I suggest keeping the present filter too.
I also think it's worth keeping both as well as they are cheap to perform and could cover other cases in the wild.
Small note to me that this relates to #36727 but the latter won't fix issue as, just like you said, get_placeholder can be a function of value. This only means we'll need even more logic to handle the presence of either get_placeholder or get_placeholder_sql.