Swim regions usually reacts the same way as footsteps regions: any shape too complex will break it.
About the swim detect, the avatar starts to swim as soon as he is inside the swim region and bellow (or inside) the swim surface. (Unless something was changed recently) My guess is your problem might be with the swim region it might just break as easily as the footsteps.
Bottom line: make it simple. Don't nest regions within regions, and break up complex regions into several simpler regions. (that also works for swimming, since you can have several swim surfaces in a single swim region as long as they are properly referenced in the region script -- at least that used to work for old properties-based PyPRP swim regions.)