I believe it is a regression error in Nokogiri. I was able to replicate your problem, and tried it with several versions of Nokogiri.
It works properly in 1.5.0:
jruby-1.6.7.2 :002 > gem 'nokogiri', '=1.5.0'
=> true
jruby-1.6.7.2 :003 > require 'nokogiri'
=> true
jruby-1.6.7.2 :004 > doc = Nokogiri::HTML.fragment("<span>3:30pm</span>")
=> #<Nokogiri::HTML::DocumentFragment:0x7d4 name="#document-fragment" children=[#<Nokogiri::XML::Element:0x7d2 name="span" children=[#<Nokogiri::XML::Text:0x7d0 "3:30pm">]>]>
It fails in 1.5.1:
jruby-1.6.7.2 :002 > gem 'nokogiri', '=1.5.1'
=> true
jruby-1.6.7.2 :003 > require 'nokogiri'
=> true
jruby-1.6.7.2 :004 > doc = Nokogiri::HTML.fragment("<span>3:30pm</span>")
=> #<Nokogiri::HTML::DocumentFragment:0x7d4 name="#document-fragment" children=[#<Nokogiri::XML::Element:0x7d2 name="span" children=[#<Nokogiri::XML::Text:0x7d0 "30pm">]>]>
Edit: It's important to note that Nokogiri was built around the awesome libxml2 C library which is really unmatched in features, speed, and ability to handle malformed markup. The JRuby implementation is an attempt to match it using Xerces and NekoHTML. I think they have done a wonderful job making the JRuby implementation almost completely match the functionality (if not the speed) of its MRI counterpart, papering over the difference between the vastly different implementations. That being said, there are still edge cases that crop up from time to time.
I went ahead and filed a bug report on Nokogiri.