1. If the work is more than a few minutes old, the pool reports "unknown-work" or similar. Most pools only retain the outstanding jobs in RAM, and since this is limited they forget jobs after 90 seconds or so. If you try to submit a nonce from a job older than this the pool will reject it even if it's valid (and even if it would have resulted in finding a block!).
...
The problem is your software not adhering to the rules given it by the pool - don't try and shift the blame elsewhere.
The pool states the time that work is valid - and your software should adhere to that.
Yes it is a bug in your miner, as you have implied, but that is all it is - the '90 seconds or so' is not some uncertain number as you are implying, it is specified to you by the pool.
There is also a very important reason why that work SHOULD be invalid - it directly represents increasing BTC transaction confirm times.
If you work on a piece of work for half an hour (on a long block) there will be half an hour of BTC transactions that you have ignored if you find a block.