I found a true workaround that allows the Validation demo to work normally. However, the placement of the components has to be different. This reveals some more clues about this issue.
First, I tried moving the ace:fileEntry component to the first form on the page (i.e. 'example-form'), and this caused no errors when navigating across the ace:fileEntry demos several times. Then, I thought that the ace:fileEntry component had to be in the first form on the page in order to avoid the error. So, I undid the previous change and just moved the 'upload-form' above the 'example-form' on the page, but this caused the same error when navigating to the demo. Then, keeping the 'upload-form' as the first form, I renamed it to 'example-form' (and updated the ace:message and ace:ajax tags to use this new id), and I renamed the original 'example-from' to something else (e.g. 'config-form'). In this case, there were no errors, and the demo worked as expected.
All the other ace:fileEntry demos have a single form and the ID is 'example-form' in all cases. So, it's interesting to see that the form where the ace:fileEntry component is in the Validation demo has to have the same ID as in the other demos. It also has to be the first form on the page, otherwise the same errors occur. If we use completely different form IDs in the Validation demo (i.e. no 'example-form'), then the errors occur again. Likewise, changing the form ID in another of the ace:fileEntry demos from 'example-form' to something else (e.g. 'test-form') also causes the error when visiting that demo for the second time.
So, it seems like when using MyFaces and a navigation style like the one used in the showcase, the form ID's have to be the same when they contain an ace:fileEntry component.