Thomas,
Thanks for the response, and your point about Dropout styles is well-taken.
Can I prevail on you for a code snippet?  All I am trying to do is add dropout in the simplest possible way, between the layers after the activations, and I had already hit on the idea of packing, running the LSTM, padding, running the dropout, etc.  This seems similar to your idea of creating new packed sequences.
However, I have a three-test benchmark, which aims to learn an identity function of complex multi-coeffcient data:

Run a single layer LSTM network (no dropout layer)
Run a two-layer LSTM network (no dropout layer)
Run a two-layer LSTM network (dropout layer between L1 and L2, dropout set to 0, i.e., deactivated)

What I see in cases 1 and 2 is the network quickly learning to output what it gets in, while in case 3 I get substantially degraded performance.  It never learns to mimic the input data at all.  What I would expect, though, is effectively identical performance between cases 2 and 3, up to the shuffling of minibatches in my standard implementations.
My best guess is that I’ve somehow broken the gradient flow, but I can’t see how, or where, or how to fix it.