Further info:
I dug through the package repo and found that IGMP proxy has indeed updated with 2.5.0. But when I tried reverting back to the 2.4.5 version, it didn't fix my issue, so I guess the problem is not IGMP proxy itself but the fact that pfSense fails to restart it.
I checked the system log events when the interface goes down and found that the script /etc/rc.newwanip runs automatically when it comes back up. Looking in this script, there's a function near the end to restart the IGMP proxy: services_igmpproxy_configure()
Trouble is, that function only executes when a change in IP address is found, which is never going to happen because the interfaces on both sides of the proxy have static IPs.
I've edited my script and added a couple of lines at the end to make it go ahead and do the restart whenever the interface coming up is one that's used by IPTV (opt1 is my LAN side and opt3 is the WAN side):
/* reload igmpproxy for IPTV interface */
if ($interface == "opt1" || $interface == "opt3") {
services_igmpproxy_configure();
}
This seems to be doing the job for me, but I guess it will get wiped out by a future update, and I still don't know what changed to make this workaround necessary.