There does seem to be a bug in how bounds are returned from characterBoundsAtIndex:. This version uses a different method:
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "Quartz" -- for PDF stuff
use scripting additions
set thePath to POSIX path of (choose file of type {"pdf"})
-- define search pattern
set {theRegex, theError} to current application's NSRegularExpression's regularExpressionWithPattern:"\\d+" options:0 |error|:(reference)
-- make URL
set anNSURL to current application's |NSURL|'s fileURLWithPath:thePath
-- make destination URL
set oldName to anNSURL's lastPathComponent()'s stringByDeletingPathExtension()
set newName to oldName's stringByAppendingString:"-2.pdf"
set destURL to anNSURL's URLByDeletingLastPathComponent()'s URLByAppendingPathComponent:newName
-- open doc and count pages
set theDoc to current application's PDFDocument's alloc()'s initWithURL:anNSURL
set theCount to theDoc's pageCount() as integer
-- create list to hold results
set findInfo to {}
-- loop through pages
repeat with i from 1 to theCount
-- get page and its text
set thePage to (theDoc's pageAtIndex:(i - 1))
set theText to thePage's |string|()
-- do search
set theRanges to (theRegex's matchesInString:theText options:0 range:{0, theText's |length|()})
-- create list to hold contents of matches
set pageFinds to {}
-- loop through matches found
repeat with aFind in theRanges
-- get the range and start and finish indexes
set foundRange to aFind's range()
-- get the matched text
set end of pageFinds to (theText's substringWithRange:foundRange) as text
-- get bounds of the matched text
set theSelection to (thePage's selectionForRange:foundRange)
set theBounds to (theSelection's boundsForPage:thePage)
-- make highlight annotation
set theHighlight to (current application's PDFAnnotationMarkup's alloc()'s initWithBounds:theBounds)
(theHighlight's setMarkupType:(current application's kPDFMarkupTypeHighlight))
-- add to page
(thePage's addAnnotation:theHighlight)
end repeat
-- update result
set end of findInfo to {pageNumber:i, foundStrings:pageFinds}
end repeat
-- save new PDF
theDoc's writeToURL:destURL
-- return result
return findInfo