Nick,
Saving resources via reusing open connections is the premise behind persistent connections, but in many cases it takes longer to excute using pconnect over connect. Don't ask me why, but that's the observation I've made through my own experience and I've read several other opinions that seem to support it.
In your case it sounds like your open connections are getting orphaned somehow, thus forcing the server to try and open a new connection. Since persistent connections persist (excuse the pun🙂 for a set period of time, the default is 1 hour I believe, you eventually max out the total number of connections the MySQL server will allow and get the error message you mentioned.
One way to sort over acheive what I think you're trying to do is to store the connection resource identifer returned by mysql_connect() in a variable, then pass it into mysql_query() and mysql_select_db() functions. While MySQL will automatically try to reuse any open and inactive connection, this method allows to you explictly reuse the connection opened at the begining of your script for all database operations during that script execution. For example:
$conn = @mysql_connect("localhost", "username", "password");
@mysql_select_db("my_db", $conn);
$rs = @($sql, $conn);
HTH.
geoff