"I also seem to run into trouble quickly when I wrap Evaluate statements inside function definitions (Func[x_] := ...). Is there a canonical procedure for dealing with this?"
Until you understand more of the complexities of the evaluation process and how some built-in functions change that evaluation process and how Evaluate further changes parts of all that... don't put an Evaluate inside a function definition.
and verify that f is what you really want it to be
Then use f without NIntegrate's evaluation arguing with Evaluate's evaluation arguing with Mathematica's evaluation.