Hate to double post, but I delved into the source code and was able to locate the problem, though I don’t know exactly what needs changing to fix this.
iuse.cpp on line 4670 (as of whichever version had files last modified at 6:39 PM 11/16/13).
I assume that method tries to use charges and then returns a bool indicating success. So the knife usage menu is paying the cost of cauterization when it decides whether to list it on the menu.