Does anyone have any ideas as to what I could do to reduce/eliminate
these conflict errors?

First, make sure that your application is not trying to overwrite the
*same* image in each request. If it needs to do that, then the
conflicts are unavoidable.
Next, making simultaneous writes into any naive container is going to
cause conflicts. You need to think carefully about how you want those
writes to work, and plan to minimize conflicts:
- Use a BTreeFolder, rather than a normal OFS.Folder (or derivative).
- Arrange for the IDs of your images to be substantially different,
typically by mangling in a random number (or, for instance, the
microseconds value of the current timestamp).

The ids are assigned sequentially, so they never collide, but should id be
'substantially different' to improve BTreeFolder2 performance?

As per your suggestion I added a BTreeFolder2 folder inside of the temporary
folder and used that for image storage and ran some more load tests. There
was a significant improvement: with 25 simultaneous users the error
conflict error rate dropped from 4.4% to 0.6% and there was an unexpected
side effect - a 20% improvement in server performance!!!