[...]
To follow up after some debugging and more digging, it turns out that I hadn't created a DILexicalBlock for my function and then the variables were getting silently dropped; I had assumed that the DISubprogram would be enough and that the DILexicalBlock was only necessary for inner scopes. With that, it all works swimmingly so far.
Thanks,
-matt