I really expected the util:exclusive-lock to fix the issue. Well, one other thing I just noticed when re-reading your report: in the line
the update replace is executed first, so when you return $node/text() + 1, the counter has already been incremented and you are actually returning the previous value + 2? What happens if you switch the two statements?
(update replace $node/text() with $node/text() + 1,$node/text() + 1)
If the problem persists, could you provide some instructions on how to use the test from jmeter or send us the corresponding config?