Phew. Just got done doing a ton of research on this. It seems that for session_start events, GA4 populates the int_val of the engaged_session event parameter. But for all other events, it populates the string_val. Here is another site that seems to mention the same issue: https://www.optimizesmart.com/dont-let-ga4-bigquery-data-types-ruin-your-analysis/
Even though I would have thought that an "engaged session" would be one where ANY of the events in that session has an engaged_session=1 (int or string value) parameter, when I do that, I massively overestimate the engagement rate.
So it appears the GA4 UI is either only using the session_start event to consider engaged sessions, or using the "any event with engaged_session.intval = 1" rule... which would result in the same outcome.