This definitely looks like a problem caused by Apple, but I couldn't find official statement or solution so far. I can see that the system redemption sheet eventually times out on the device logs and there is nothing I can do about it, since the redemption sheet is completely out of my control:
AMSPurchaseTask: [799CEF45:E605CC00] === Failed === -> error = Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={AMSStatusCode=0, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <39158C66-DE10-45C7-92A6-1D1746C5276D>.<1>, NSErrorFailingURLKey=https://p50-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct?guid=000..."
However, I did notice that this time out does not happen often if the same redemption sheet is invoked on top of AppStore instead of my app. Hence, there is one dodgy workaround this issue, which is to launch a URL that will force it to open on AppStore and present the redemption sheet:
https://apps.apple.com/redeem?ctx=offercodes&id=APP_ID
This is opens the same redemption sheet on AppStore as a temporary workaround, but I doubt Apple will ever offer a proper solution...