It seems somehow the shellcmd was in the config.xml twice in different places. Removed them both and just left the crontab entry so it starts up a minute after booting. Not ideal, but it may be the only way as it seems there is a conflict with pfSense executing the shellcmd too early before everything else has finished starting up.
I'm guessing one option may be to have the shellcmd script look for the booted file to appear, like pfBlockerNG does, before actually starting the script.
Its all very odd as it was working perfectly months ago, I can only assume either pfSense made some tweak in when the shellcmd is executed causing it to hang like this due to starting too early, or I was using some alternative way of starting the script on boot (I lost that old config so not sure).
Its baffling as surely shellcmd should be the vast last thing to execute once everything else has finished, not half-way through the boot process. Seems a very questionable choice if your startup script can hang the boot process.
They certainly don't seem to document all changes, possibly because some things are happening upstream in FreeBSD itself. I noticed after the upgrade to 2.4.4 I'm using a lot more RAM, I think its related to zfs as before it was detecting I had less than 4GB RAM so disabling some functionality, perhaps now its ignoring the RAM allocated to the integrated graphics so acting like I have 4GB RAM (which I do minus iGPU). But I digress.