Maybe the first query works for some reason and the result is cached, then once the TTL expires on those results, it has to query again and at that point something is stopping it working?

Currently, your clients on the internal network query the Core for results and the core then does a full recursive look up (it doesn't use your ISP's DNS servers), whereas any resolutions your core attempts to do for applications running locally (like browsers on KDE) are not using the Core's DNS server, they just use the Core's normal DNS client to query your ISP. Perhaps if you tried getting internal client resolution going the same way this might fix it?

You can simulate (similar) behaviour by setting up forwarders on the core. These will tell it not to resolve queries itself, but to forward them on to your ISP in a similar query to the DNS client running on the core. You can do this in /etc/bind/named.conf.forwarders

bind didn't work very well for me in 0710 - I had all kinds of strange issues. Most were resolved by using OpenDNS, but it still crapped out every once in a while. I also had hardware incompatibility issues with my NICs that made things even worse. I have no issues in 0810 - you might consider trying 0810 alpha.