Update and answer:
Update:
I was missing several .Value items and chose to use dateinterval.{day,month,year} instead of "m" or "d";
as well, instead of just returning an integer to plug into a data building field I used date serializer; Here is the working code, I hope somebody can get use out of my 3-day torment.
=DateSerial(Fields!LastYear.Value,
DatePart(dateinterval.month,Parameters!EndDate.Value),
IIF(
DatePart(dateinterval.month,Parameters!EndDate.Value) = 2 AND
iif(
cdbl(DatePart(dateinterval.year,Parameters!StartDate.Value)Mod 400)=0,366,
iif(cdbl(DatePart(dateinterval.year,Parameters!StartDate.Value)Mod 100)=0,365,
iif(cdbl(DatePart(dateinterval.year,Parameters!StartDate.Value)Mod 4)=0,366,365))
) = 366 AND
DatePart(dateinterval.day,Parameters!EndDate.Value) = 29 ,DatePart(dateinterval.day,Fields!LYLastDayOfMonth.Value),
IIF(
iif(
(cdbl(Fields!LastYear.Value)Mod 400)=0,366,
iif((cdbl(Fields!LastYear.Value)Mod 100)=0,365,
iif((cdbl(Fields!LastYear.Value)Mod 4)=0,366,365))
)=366 AND
DatePart(dateinterval.day,Parameters!EndDate.Value) = 28,DatePart(dateinterval.day,Fields!LYLastDayOfMonth.Value),DatePart(dateinterval.day,Parameters!EndDate.Value)
)
)
)