Solved-ish.
I got webpack to run reliably by replacing its use of md4 with sha256 in these files:
$ grep -r md4 node_modules/webpack
node_modules/webpack/lib/ModuleFilenameHelpers.js: const hash = createHash("md4");
node_modules/webpack/lib/optimize/ConcatenatedModule.js: const hash = createHash("md4");
node_modules/webpack/lib/optimize/SplitChunksPlugin.js: .createHash("md4")
node_modules/webpack/lib/NamedModulesPlugin.js: const hash = createHash("md4");
node_modules/webpack/lib/SourceMapDevToolPlugin.js: contentHash: createHash("md4")
node_modules/webpack/lib/WebpackOptionsDefaulter.js: this.set("output.hashFunction", "md4");
node_modules/webpack/lib/HashedModuleIdsPlugin.js: hashFunction: "md4",
then in `config/initializers/content_security_policy.rb', I replaced the line
.script_src :self, assets_host, "'wasm-unsafe-eval'"
with
p.script_src :self, assets_host, "'wasm-unsafe-eval' 'unsafe-eval'"
This seems like way more tinkering with the code and defaults than I should need to keep the server running so I'll probably dig more later. I hope this post ends up being useful to anyone else having an issue.