I managed to move an issue programmatically (groovy script using Script Runner, running as escalation service) from one project to another, migrating the workflow using migrateIssueToWorkflow of WorkflowManager. So I used a code similar to https://community.atlassian.com/t5/Answers-Developer-Questions/How-to-move-an-issue-programatically-to-a-different-project/qaq-p/515955. My special configuration allows for a specialized case, so that this is working. I also managed to enter change history entries that look similar to entries of a manual move using UI.
So far so good.
But compared to the manual move using UI I'm still missing, that the issue is found by searching for original issue key. What entry do I have to make / what methods of what objects to use, so I get that working?