Attempting to walk up a block that does not have a Y height of 0.5 or 1 will cause the player to briefly fall downward to 0 or 0.5(depending on the entity's height).
A tested fix has already been found, although I'm sure that the official code will have other variable names, so the proper location should be able to be found from this snippet below.
if (var40 > 0.0D && !this.worldObj.isRemote)
this.ySize = (float)((double)this.ySize + var40 + 0.01D);
It exists at the end of the "move" profile section in the entity code. The remote world check makes this piece of code only run on the server side, thereby stopping the desync(and therefore the bounce) from occurring.