What would cause the gettext filter to not work for a given text domain?

Filtering gettext is horrible for performance. I would strongly recommend to try do it via any other approach. And if all else fails to add and remove filter with extreme precision around necessary parts.

As for why it fails my educated guess would be — timing. It is quite common for strings to be centralized and processed early in the process. For example WP’s own labels for post types and taxonomies are processed like that.

It might be that by the time you have added your filter, the theme had already generated string a stashed away a final copy somewhere to make use of.