I had a need to do this some time ago. I implemented a well known algorithm from an English standards organization (I've forgotten exactly who).
This is a little shorter than yours and has a pumpkin date associated with it (but it's a long way out).
Here it is:
CREATE function fn_Calc_Easter_Sunday(@iYear int)
returns DateTime
as
begin
Declare @iD int,
@iE int,
@iQ int,
@iMonth int,
@iDay int
Select @iD = 255 - 11 * (@iYear % 19)
If @iD > 50
Select @iD = (@iD-21) % 30 + 21
If @iD > 48
Select @iD = @iD - 1
Select @iE = (@iYear + @iYear/4 + @iD + 1) % 7
Select @iQ = @iD + 7 - @iE;
If @iQ < 32
Begin
Select @iMonth = 3
Select @iDay = @iQ
End
Else
Begin
Select @iMonth = 4
Select @iDay = @iQ - 31
End
RETURN (
SELECT
CONVERT(DATETIME, [Year] + REPLICATE('0', 2-LEN([Month])) + [Month] + REPLICATE('0', 2-LEN([Day])) + [Day])
FROM
(SELECT CAST(@iYear AS VARCHAR(4)) as [Year], CAST(@iMonth AS VARCHAR(2)) AS [Month], CAST(@iDay AS VARCHAR(2)) AS [Day]) a
);
End