I'm getting about 7% rejected ("stale") shares on antpool. I'm really new to this mining thing -- is this normal?

7% is kind of a lot but since they are stale it's hard to say if that's your issue or not. Stale means they would have been valid but they arrived late, so why did they arrive late? If your miner isn't changing work when the pool sends a work update then the issue is with the miner, if it is something else then it's not the miner. Like maybe the internet between you and the pool?
I notice that my Z9 goes through phases of high rejects but the pool I am on does not break down types of rejected shares so I don't know what the reason is. But if I reboot the miner it stops for a while (like hours). But I am inclined to think my issue is related to the fact that I have it overclocked as high as I can get it to go and be stable. If I overclock higher (which I certainly did while testing what worked) I get a lot of rejects and lower hashrate. I found the clock freq that seems to offer the highest stable hashrate and I have left it there, but as I say, it seems to want restarts every now and again to remain stable. I may lower my freq again if it happens too often. Your freq seems like it must be quite a bit lower though because you are the in 14k range while I have mine up in the 16k range.

Maybe try a different pool and see what happens?