That's pretty interesting. After a bunch of digging, I've actually gotten my script to output the right thing to remove the current filter, and put in a new version.
As an example for AS23028 below;
/routing/filter/rule remove [find chain=as23028-import-ipv4]
/routing/filter/rule remove [find chain=as23028-import-ipv6]
/routing filter rule
add chain=as23028-import-ipv4 disabled=no rule="if (dst in 38.229.0.0/16 && dst-len<=24) { jump fcix-import}"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==68.22.187.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==192.0.37.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==192.0.38.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst in 192.0.40.0/23 && dst-len<=24) { jump fcix-import}"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==192.138.226.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst in 199.7.82.0/23 && dst-len<=24) { jump fcix-import}"
add chain=as23028-import-ipv4 disabled=no rule="if (dst in 199.7.94.0/23 && dst-len<=24) { jump fcix-import}"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==199.43.132.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==203.28.18.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==204.74.64.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==209.176.111.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 disabled=no rule="if (dst in 216.31.0.0/18 && dst-len<=24) { jump fcix-import}"
add chain=as23028-import-ipv4 disabled=no rule="if (dst==216.90.108.0/24) { jump fcix-import }"
add chain=as23028-import-ipv4 rule="reject"
add chain=as23028-import-ipv6 disabled=no rule="if (dst==2001:500:3::/48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst==2001:500:8c::/48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst in 2001:500:9c::/46 && dst-len<=48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst in 2602:800:9004::/47 && dst-len<=48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst in 2604:8800::/32 && dst-len<=48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst==2620:0:6b0::/48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst==2620:0:2ee0::/48) { jump fcix-import }"
add chain=as23028-import-ipv6 disabled=no rule="if (dst==2620:0:22b0::/48) { jump fcix-import }"
add chain=as23028-import-ipv6 rule="reject"
This seems to work fine when I paste it into the box on the command line. It doesn't seem to flap the BGP session at least - but it looks pretty trivial to create a new filter, update the BGP session and then remove the old filter.
Now to find a good way to automate the SSH onto the router, to run the commands