Yes I agree. I can use the ETag returned by a PUT in a subsequent PUT and it works, just not the etag returned by a GET.
I would expect to get a 400 error rather than a 500 if I supply a bad If-Match header though.
In any case I know how to proceed - use the version from the body of the GET instead of the ETag header.