Solution:
Ok, well it seems that the way I was calling “action” in my JS was incorrect, and that should be:
data: {
action: 'totals_updated'
},
Not sure how so many others have got it working without that, perhaps some kind of WP update? Either way, works, and I can stop swearing to myself, for now..