I ran into this problem last year. You aren't doing anything wrong. The reason for this happening is simple. Apache (and IIS) do not sent an updated etag value with the response to the PUT request (webdav save method) because you can add post-processing to the PUT request that would change the file (common with things like GIT where change headers are added). This means that the Apache (and IIS) can't be positive that the file that would be sent for a subsequent GET request would be identical to what was sent with the PUT request. So, it is inappropriate for the web server to include the etag header in the response to the PUT request.
The client application (tiddlywiki running in your browser) should follow-up the PUT request with a GET request to get an update to the tiddlywiki file after the PUT finishes to ensure that all affected changes are reflected in what you have in your browser. This would also provide an updated etag value and solve the 412 issue.
I have tested the above with Firefox, Chrome, IE, and Safari on Windows, Linux, and OSX (where the software was available to me) with the Apache web server (version 2.4) running on Linux, FreeBSD, Windows 7, and Windows 10 as well as IIS running on both Windows 7 and Windows 10. They all behave the same way.
The only reliable work-around I've found to-date is to reload the web page after each save of tiddlywiki.
My Apache web server uses WebDav for tiddlywiki and I use the post-processing to make a backup (similar to how tiddlyspot has a backup directory) of changes to the files. It's not available for general use because of the etag issue.