Thankfully, it was my fault all along
A while ago, I posted about how the Android browser hates my website. This didn't make any sense at the time, and I honestly thought there was a chance I'd discovered one of those rare events in programming - a bug that wasn't my fault. Obviously, I was wrong. The first rule in programming is it's always your fault. Computers just do what they're told, and somehow, unbeknownst to me, I was telling the Android Browser to render nothing.
It turns out, that was literally the case. What had changed between the Ice Cream Sandwich and Jelly Bean versions of Browser was that the HTTP_X_REQUESTED_WITH header was set to com.android.browser, rather than not being set at all. A little bit of Ajaxifying code was detecting that, and deciding that Browser really wanted the Ajax view. Which didn't exist, so it got a nice helping of nothing. And then, just like it was told to, rendered that into a nice blank page. Every other browser I tested with, including the tools for viewing source on Android, did not set this header and received the full source code.
So, to make a long story short, it was all my fault.