Just in case you decide to write your own C# code: I've writen an open source pure Java PNG coder/decoder, PNGJ, you might find it useful; it should not be difficult to port to C#. It's just a coder, not an optimizer, but it supports all writing options/strategies (including different filters for each row) so you could easily plug your heuristics to it.
Updated: I've coded a C# PNG coder/encoder PngCs, ported from Java (PngJ), it's open source and, since Dec-2012 it supports all PNG variants (except that it does not write interlaced PNG, only reads them)