Calling a button's OnClick method elsewhere - Good Practice?
I'd suggest something like the following which is simple enough for even a novice like me to understand. Is there a real need to simulate button click? You're not testing buttons, are you? 

// OnClick="ThisButton_OnClick" for ThisButton
protected void ThisButton_OnClick(object sender, EventArgs e)
{
    // do stuff
    if(condition)
        DoStuffThatButtonWouldDo(arg);
    else
        // do stuff
}

// OnClick="ThatButton_OnClick" for ThatButton
protected void ThatButton_OnClick(object sender, EventArgs e)
{
    DoStuffThatButtonWouldDo(arg);
}

private static DoStuffThatButtonWouldDo(fancy arguments) 
{ 
    //TODO: do all the stuff that the that button would do 
}