... As for the bounty issue, my site allows submitters to click a "cancel bounty" button to have the bounty they submitted returned back to the address they sent from. This button is only accessible from a special link they receive after submitting the work, so anyone can't just go in and click cancel and wreak havoc. ...
A client asks for an 8-character vanity address, knowing the cost is too high. After one (or more) 7-character partial matches have been found, the client cancels their request. Now what?
Maybe the client wanted a 7-character address in the first place. Depending what information is public, the client may have their 7-character address for free, and neither you nor the miners get anything.
Maybe the client wanted a 7-character address in the first place. Even if partial matches are secret, a miner who found a 7-character partial match may negotiate with the original client for the 7-character match. Neither you nor the other miners get anything.
I would suggest that a refund should deduct *something* related to the value of work done so far. The deduction to be paid to the miners for work already performed.
If you choose a sophisticated pool payout method, like those used by some Bitcoin mining pools, where payouts may carry over from one block to the next, then the algorithms must be adapted (significantly) for this project. Unlike Bitcoin mining, where every block reward is the same and difficulty changes modestly every couple of weeks, each and every Vanity job payout is different and the difficulty may vary by orders of magnitude from one job to the next. Further complication is that two (or more) Vanity jobs may be in progress at the same time.
You may have to develop your own payout scheme that will lure vanity miners whether a job is new or old, even if "luck" (as used by some Bitcoin mining pools) is bad. The fluctuations you can withstand (PPS) and fees you charge will have a big say in choosing payout schemes that are mutually beneficial to both you and the miners.
Also, I don't see any need for the server to generate the random starting point in the ECDSA keyspace. The mining client chooses their own starting point, and the probability of overlap (with a fair client) is negligible. To avoid cheating, you should keep the partial matches and don't award credit for duplicate matches.
It sounds like an interesting project!