I went to
http://www.cursor.cc and uploaded my I-beam cursor (beam_r.cur). According to the website, the hotspot was right on the cursor. I didn't make any changes to it but saved it under a different name. After selecting it as the I-beam cursor to use, it worked perfectly. As an added bonus, it now works much better in Windows, allowing me to easily select between two lower case L's in an 8-point font (that used to make me pull some hair out).
One thing that's strange. When the cursor is being displayed in the file open window when selecting it, it doesn't display correctly. But it displays fine in use.
Looking at the differences in the files shows that the original beam_r.cur is very large, 1,158 bytes, and contains the image of the cursor surrounded by lots of whitespace. The new beam_s.cur is only 326 bytes long and the image is only what's needed to display the cursor.
Perhaps you should include some I-beam cursors of various sizes with the program that people could use if they find their own cursor is not working right.
So it looks like Windows is indeed at fault. Thank you, Microsoft, for screwing up something as simple as a cursor...