IPlugin is the old interface used in V1, while IPluginEvaluate is the new interface used in V2 which requires you less methods to implement.
AutoEvaluate == true -> Evaluate is called every frame.
AutoEvaluate == false -> Evaluate is only called if a downstream node requests data.
In V1 auto evaluation] is set explicitly via the interface IPlugin.
In V2 auto evaluation] is set via the PluginInfo attribute. By default auto evaluation is disabled.
So your example can be written like this (shorter as you see):
[PluginInfo(Name = "Beep", Category = "System", AutoEvaluate = true)](PluginInfo(Name = "Beep", Category = "System", AutoEvaluate = true))
public class SystemBeepNode : IPluginEvaluate
[Input("Input", IsBang=true, IsSingle=true)](Input("Input", IsBang=true, IsSingle=true))
//called every frame because AutoEvaluate == true (see above)
public void Evaluate(int SpreadMax)