It seems that within the context of Bevy, rfd must be invoked from the main thread on this platform. rfd's docs suggest that it should work from any thread, but I just get an infinite spinning beachball unless I use this workaround.
This can be accomplished by adding a "NonSend" marker to the system parameter doing the exporting.
fn export_system(marker: NonSend<NonSendMarker>) {
}