Here is a different attempt to work around the Listable attribute of Plus and Times.
doPE[c_, x_, grid_] := Internal`InheritedBlock[{Plus, Times}, ClearAttributes[{Plus, Times}, Listable]; Hold @@ {c /. x -> grid} //. { L_List * n__?NumericQ :> RuleCondition[n * # & /@ L], L_List + n__?NumericQ :> RuleCondition[n + # & /@ L] } ] Test:
c = (Sinh[1/2 (g x^4 + x^2)] + p^3 x/(g - x^3)) g^2 x^2; c2 = -5832. - 432. x^2 - 1728. f x^3 - 12. (32. + 72. d1f + 144. f^2 - 27. p^4) x^4 - 24. f (32. + 72. d1f - 27. p^4) x^5; grid = {1., 2., 3., 4.}; doPE[c, x, grid] doPE[c2, x, grid] Hold[g^2 {1., 4., 9., 16.} ((p^3 {1., 2., 3., 4.})/(g + {-1., -8., -27., -64.}) + Sinh[1/2 ({1., 4., 9., 16.} + g {1., 16., 81., 256.})])] Hold[f {-1728., -13824., -46656., -110592.} + (32. + 72. d1f + 144. f^2 - 27. p^4) {-12., -192., -972., -3072.} + f (32. + 72. d1f - 27. p^4) {-24., -768., -5832., -24576.} + {-6264., -7560., -9720., -12744.}]