My crash report is below. My hypothesis, based on the error having to do with decrypting encrypted data, is that a certificate or key expired someplace, and iOS's voice library can no longer decode certain voice files. But that really doesn't explain why it is so intermittent.
CrashReporter Key:	890f4575948bc41c861ae0f37928bcdd912bd0d3
Hardware Model:		 iPhone10,5
Process:						dvxapp
Identifier:				 com.davinix.dvxapp
Version:						1.7.0
Role:							 Foreground
OS Version:				 iOS 14.3
Exception Type:		 EXC_BAD_ACCESS
EXC_BAD_ACCESS: Attempted to dereference garbage pointer 0x11f600000.
0 TextToSpeech							_TTSCreateDecryptedDataFromEncryptedData
1 TextToSpeechBundleSupport -[TTSVocalizer loadResource:mimeType:resourceURL:supportsAccurateWordCallbacks:]
2 TextToSpeechBundleSupport -[TTSSpeechServerInstance _loadVoiceResource:voiceResource:]
3 TextToSpeechBundleSupport -[TTSSpeechServerInstance _initializeSpeechEngine:]
4 TextToSpeechBundleSupport -[TTSSpeechServerInstance _initializeSpeech:]
5 TextToSpeechBundleSupport -[TTSSpeechServerInstance _processCurrentRequest:]
6 TextToSpeechBundleSupport -[TTSSpeechServerInstance _handleSpeechThread]
7 TextToSpeechBundleSupport __SpeechThread
8 libsystem_pthread.dylib	 __pthread_start
Edited to add: I was able to resolve this by removing the willSpeakRangeOfSpeechString method from my speech synthesizer delegate, which fortunately I didn't use for anything.
To those trying to reproduce, try using the com.apple.ttsbundle.sirimaleen-US_compact (Aaron) or com.apple.ttsbundle.Samantha-compact (Samantha) voice, which gave me the most consistent crashes.