I was able to determine that either system.text.json or one of it's dependencies was referencing a version of system.buffers that does not exist.
The common and most accepted fix (from searching online) is to use bindingRedirect to map system.buffers to a version that does exist.
Example:
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
I attempted to add this to the app.config file, but it doesn't look like SSIS scripts use that file. I also tried adding redirects to the DTExec.exe.config file on the server and that didn't help either.
Ultimately, the fix was to abandon use of system.text.json and use newtonsoft.json instead. This required some rework of my code, but ultimately solved the problem since newtonsoft.json does not have the dependency on system.buffers.