Overlaps and Intersect should use >= / <= for their checks.
func (r Rectangle) Overlaps(s Rectangle) bool {
return r.Min.X <= s.Max.X && s.Min.X <= r.Max.X &&
r.Min.Y <= s.Max.Y && s.Min.Y <= r.Max.Y
}
instead of
func (r Rectangle) Overlaps(s Rectangle) bool {
return r.Min.X < s.Max.X && s.Min.X < r.Max.X &&
r.Min.Y < s.Max.Y && s.Min.Y < r.Max.Y
}