Mac daemon not able to run bash script
Alright, here’s what I ended up doing, which does work and doesn’t require any other installations. I tried the answer from Gilby, but wasn’t able to get fdautil to work after downloading and installing it via the LaunchControl trial version.
If it had worked, it seems it would have done so by granting LaunchControl’s fdautil utility full disk access, which would then use those permissions somehow to execute my netspeed script (without passing those permissions to /bin/bash?).
Method 1: AppleScript wrapper
I created Users/myself/Documents/bin/iperf/netspeed.scpt, which has the following:
do shell script &quot;/Users/myself/Documents/bin/iperf/netspeed&quot;

I then updated the ProgramArguments entry in the launchd plist to:
&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;/usr/bin/osascript&lt;/string&gt;
    &lt;string&gt;/Users/myself/Documents/bin/iperf/netspeed.scpt&lt;/string&gt;
&lt;/array&gt;

Finally, in System Preferences &gt; Security and Privacy &gt; Files and Folders I was able to grant access for Users/myself/Documents to /usr/bin/osascript, and successfully launch the daemon.
Method 2: Put script in location with less security
As @user3439894 pointed out, since the main reason it was difficult to execute netspeed in the first place was that I had it in ~myself/Documents.../, which has elevated permissions requirements, I can also just put it in a location with less security.
I followed the suggestion to try /Users/Shared/.../netspeed and it indeed worked with my original script and plist contents! To be clear, the ProgramArguments would now be:
&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;/Users/Shared/.../netspeed&lt;/string&gt;
&lt;/array&gt;