Per quello che ho capito io, la situazione è la seguente:
I controlli <asp:button> utilizzano l'OnServerClick... infatti sono runat="server";
Se utilizzi:
<input type=button" id="cmdTasto" onClick="return funzione();" runat="server">
ti ritrovi ad avere un evento lato client (funzione()), e un seguente evento OnServerClick.
Spesso ho utilizzato cose del genere per effettuare i controlli in Javascript lato Client prima di accedere al Server.
Utilizza sempre onClick="return funzione();", per il semplice fatto che se non metti in "return", il javascript anche se ti segnala un errore, non impedisce all'evento server di scatenarsi!
Ciao