Blender 2.81 (not mantaflow)
This solution works but was probably never designed to work like this, therefore I can't guarantee that it's a stable workflow. It was stable enough when I tested it anyway.
Unfortunately, you should have already baked your smoke simulation using "External", otherwise you'll need to bake it again. Choose a directory for your bake to go to (e.g. //cache
)

After you've baked, in //cache
you will have several files called _<frame>_00.bphys
. Copy the file corresponding to your selected frame, and paste it into a new directory //cache2
, changing its name to _000001_00.bphys
.
Note down the dimensions of your smoke domain, and create a new cube with exactly the same dimensions. You can now remove your original smoke domain.
In the newly created object, enable Smoke, set its type to Domain. Under Cache check External and use //cache2
as its Path. Simulation "End" gets automatically reduced to 1.

The object now holds the smoke information from only the selected frame and, as far as I've seen, it doesn't try to overwrite your cache or to add new frames to it.
The original //cache
folder, containing all your bake and the unnecessary frames, can now be removed (but I'd keep it as a backup, at least the first N
frames, where N
is the frame you've picked)