It seems Cumulative Update 6 (due in mid Feb 08) for SQL Server 2005 Service Pack 2 will include a code change so that performance counters show current performance values while the service is running, no matter what the service state was when perfmon was initially started up. The effect of that original design I explained in this previous post.
SQL Server performance counters DLL works in two modes: static and server interaction. Static meaning that the DLL cannot communicate with SQL Server (because the service is stopped). In this mode, we only show counter names but all counter values are set to zero. Server interaction mode is the mode where the library can communicate with SQL Server (because it is up and running). In build before CU6, the DLL behaved so that in static mode it wasn’t able to recover and switch to server interaction mode. The workaround, as explained in the previous post described above, was to restart Perfmon. Hopefully, starting with CU6, that workaround won’t be required any longer, since it will be able to dynamically switch between static and server mode.