Interesting. I'm actually wondering if the problem here is that the CDN is not setting an expiration date on the Cookie, which I've found will cause the Roku Cookie cache to ignore the Cookie (which sort of makes sense, since a set-cookie w/o an expiration is essentially a session cookie one time cookie). So I wonder if this would actually work if a non-zero value was set by the CDN.
Anyway, I was indeed able to set the Cookie headers manually. I couldn't get it working with SetCookies, but I was able to just construct the Cookie header myself and add it, and now it works.
One thing I noticed is that Roku appends any query string parameters that were placed on the first request along with every other request. So requests for the sub playlist, key files, and media segments all get the query strings appended. It doesn't appear to matter, as I can get video playback working either way.
Is this intentional by Roku? What is the reason?