Debería ser add hl,bc, no?
Para mayor precisión puedes dividir bc (c) entre 2 (srl c) despues de la segunda llamada, lo que daría un resultado final de 31.25, aunque con mas redondeos de por medio. Si quieres exactamente 33.33% puedes olvidarte de esas rutinas y hacer tus propios calculos con curhp y maxhp que tampoco seria muy complicado.
Parte2:
Al hacer pop af estas recuperando el valor de f cuando hiciste push af, y por tanto lo que te devuelve getquartermaxhp en f (c/nc) lo ignoras completamente al hacer el salto condicional. Si todo lo demas esta bien, veras que o la berry se te activa siempre o nunca, en funcion del valor de c en f cuando hiciste el push af.