It's not recommended to export to an older version and use the JSON directly in the older runtime. When exporting to an older version it's intended that you'd import the JSON into the older version. You'd then export from the older version and use that data. That'd be the "correct" way.
The reason it's not recommended is that your data may have issues when exporting to older versions. You should import it into the old version and review the project to make sure everything is OK. Many things can go wrong when saving the older JSON, most importantly data loss from the older version not having functionality used in the newer version. For example, if you use physics in 4.2 then export JSON to 4.0 and import that into 4.0, you won't have physics. In other cases it's worse, eg saving < 4.0 versions will lose all curves due to those versions not being able to support how 4.0+ stores and applies curves. There may be bugs in the conversion to older versions, as saving older versions is more of an emergency recovery feature. It's not a common workflow and so with fewer people using it, it's more likely to have problems no one has noticed yet. Finally, the old JSON data may not be exactly the same as what the older version exports, for various reasons.
If you are using 4.0 runtimes, then you should use the latest 4.0 editor, both to animate and export. This has fewer potential problems and ensures your exports will work correctly. To do that, export your JSON to 4.0, run the latest 4.0 editor, import the data into 4.0, and save a 4.0 .spine
file. From there keep using 4.0 until you are ready to update your runtimes.
Alternatively, you could update your runtimes to 4.2 and then just export from 4.2. This is likely better, as you get physics and other new features.
The reason Spine has the ability to save to older version data at all is to make it easier to get that data in a format that can be imported into older versions. It used to require using a command line tool called JsonRollback and was generally a big pain.
All that said, I'm not sure why it would go from not working to working. I don't believe we made a chance related to this recently. If it works in Skeleton Viewer then in indeed could be a runtime problem (albeit for a not quite officially support use case). It may be interesting to see if importing into 4.0 and exporting from 4.0 fixes the issue.