My Launch Daemon doesn't work despite returning a 0 status
For those who don't want to read through the comments, it was a pretty simple fix after Mark gave me a bit of insight.

Initially, I wrote the vmstatus_startup script to call VM.sh which would then continually refresh the perl script (every 5 seconds). I was attempting to call the shell script from launchctl which just adds layers of complexity.

Instead, calling the perl script directly from the .plist and giving the keep alive key allowed it to run constantly after boot.

Finally, I had to make sure to add the perl directory to the .plist above the location of the script since launchd doens't have a PATH the same way a user does.