not really sure about l4d1, it has no vscript engine why ShutDownScriptedMode() is pointless, it's still kinda pointless in l4d2 since it don't do everything the alt method of changing level does.
You can try calling that "CDirector::OnChangeChapterVote()"in l4d1 see if it fixes the issue.
And ServerCommand("changelevel %s", sMap) is just the same as ForceChangeLevel() calls changelevel cmd, like every other level changing method including mine, it is called one way or another.
As for the other issues with the game, the talker system leaks, filling up some table or something with lots of concepts i think, after a while it can take whole game frames to process a response, this is persistent across levels i have unable to understand how to fix the problem.
EDIT: This is why alot of l4d actions don't happen when forcing a map change without voting, e.g. intro sequence don't play these seem to be legacy cmds from counter strike maybe