thanks for your reply.
I've tried to turn off the custom Ajax Handler but it didn't help.
But what I've accidently noticed during this attempt is that the issue is obviously related to caching (i.e. WP Rocket in our case).
When I'm logged in to the WP backend (caching is completely disabled for the admin session) all search results are OK. As soon as I log off all search result links are being resolved to the base language as described above ….
Anyway this seems strange to me. If the search scope is correct (the WPML language param correctly passed) and also the entire result including postID, title, description etc., why the link is not set correctly at the same time together with everything else?
Unfortunately I cannot provide access to the backend on the production server so I have to stick with my quick & dirty fix for the moment. Maybe you'll get other request in the near future as there should be quite a lot of people using a similar setup.